在上篇asp .net 多文档上传控件实现的多文件上载控件,在上载文件太大的时候,就会出现“文件已经关闭”的错误,现在这个版本,重新实现修改原来的方式,可以上载任意大小的文件,并且在添加文件时也不用回调服务端,删除文件时,也会动态的删除选择的文件,截图如下:

选择文件:

上载成功:

源码

MutiLoad控件
  1using System;
  2using System.Data;
  3using System.Configuration;
  4using System.Web;
  5using System.Web.Security;
  6using System.Web.UI;
  7using System.Web.UI.WebControls;
  8using System.Web.UI.WebControls.WebParts;
  9using System.Web.UI.HtmlControls;
 10using System.Web.UI.MobileControls;
 11using System.Collections.Generic;
 12
 13
 14namespace WebApplication1
 15{
 16    public class MutiLoad:WebControl
 17    {
 18        string strFiles = "";
 19        List<int> list = new List<int>();        
 20        
 21        public int Count
 22        {
 23            get
 24            {
 25               
 26                return list.Count;
 27            }
 28        }
 29        public int[] FileIndex
 30        {
 31            get
 32            {
 33                return list.ToArray();
 34            }
 35        }
 36        protected override void OnLoad(EventArgs e)
 37        {
 38            base.OnLoad(e);
 39            if (Page.IsPostBack)
 40            {
 41                if (Page.Request.Form["hidvalue"] == null)
 42                    strFiles ="";
 43                else
 44                    strFiles = ","+Page.Request.Form["hidvalue"].Trim(',')+",";
 45                HttpFileCollection files1 =HttpContext.Current.Request.Files;
 46                for (int i = 0; i < files1.Count; i++)
 47                {
 48                    if (CheckFile(files1[i].FileName))
 49                        list.Add(i);
 50                }
 51
 52            }
 53        }
 54        private bool CheckFile(string FileName)
 55        {
 56            if (strFiles.IndexOf("," + FileName + ",") == -1)
 57                return false;
 58            strFiles = strFiles.Replace(FileName + ",","");
 59            return true;
 60        }
 61        protected override void OnPreRender(EventArgs e)
 62        {
 63            if (!Page.ClientScript.IsClientScriptBlockRegistered("MyJavaScript"))
 64            {
 65                Page.ClientScript.RegisterClientScriptBlock
 66               (Page.GetType(), "MyJavaScript", strScript);
 67            }
 68            base.OnPreRender(e);
 69            HtmlForm form = this.Page.Form;
 70            if ((form != null) && (form.Enctype.Length == 0))
 71            {
 72                form.Enctype = "multipart/form-data";
 73            }
 74        }
 75        protected override void Render(HtmlTextWriter writer)
 76        {
 77            base.Render(writer);
 78            writer.Write("<input type='hidden' id='hidvalue' name='hidvalue' />");
 79            writer.Write(strTable);
 80        }
 81
 82        WriteTable#region WriteTable
 83        private readonly string strTable = @" <table border='0' cellpadding='0' cellspacing='0' width='100%'>
 84                <tr>
 85                    <td>
 86                        <p id='MyFile'>
 87                            <span num='1'>
 88                                <input type='file' size='60' name='File' style='width:100%;height:25px' /></span></p>
 89                    </td>
 90                    <td align='left' style='width:100px'>
 91                        &nbsp;<input type='button' value='增加' οnclick='addFile()' />
 92                        <input type='button' value='删除'
 93                            οnclick='javascript:removeOptionSelected()' />&nbsp;
 94                    </td>
 95                </tr>
 96                <tr>
 97                    <td colspan='2' align='left'>
 98                        <select size='10' name='SelectListBox' id='SelectListBox' style='width:100%'>
 99                        </select>
100                    </td>
101                </tr>
102            </table>";
103        #endregion
104        script#region script
105        private readonly string strScript = @"<script language='JavaScript' type='text/javascript'>
106    <!--
107var count =1;
108    var SelectControlID='SelectListBox';
109    function addFile()
110    {    
111   
112          if(!CheckFile())
113            return;
114        count++;
115        var str = ""<span Num='""+count+""'><INPUT type='file' size='60' NAME='File'  style='width:100%;height:25px'/></span>"";
116        document.getElementById('MyFile').insertAdjacentHTML('beforeEnd',str)
117    }
118    function CheckFile()
119    {
120       var filenames = document.getElementById('MyFile').getElementsByTagName('span');
121       for(var i =0;i<filenames.length;i++)
122       {           
123            if( filenames[i].getAttribute('Num') == count)
124            {
125            var file =  filenames[i].getElementsByTagName('input').item(0).value;
126            if(file == '')
127            {
128                alert('请选择文件');
129                return false;
130            }
131            if(CheckOption(file))
132            {
133                alert('文件已经在列表中存在。');
134                return false;
135             }
136                filenames[i].style.display='none';                 
137                appendOptionLast(file);
138                return true;
139            }            
140                
141       }
142       return true;
143   }
144   function CheckUpload()
145   {
146        var str = getOption();
147        if(str == '')
148        {
149            alert('请选择要上载的文件。');
150            return false;
151        }
152        document.all.hidvalue.value=str;
153        return true;
154   }
155    
156   
157    function insertOptionBefore(num)
158    {
159      var elSel = document.getElementById(SelectControlID);
160      if (elSel.selectedIndex >= 0) {
161        var elOptNew = document.createElement('option');
162        elOptNew.text =  num;
163        elOptNew.value = num;
164        var elOptOld = elSel.options[elSel.selectedIndex];  
165        try {
166          elSel.add(elOptNew, elOptOld); // standards compliant; doesn't work in IE
167        }
168        catch(ex) {
169          elSel.add(elOptNew, elSel.selectedIndex); // IE only
170        }
171      }
172    }
173
174    function removeOptionSelected()
175    {
176      var elSel = document.getElementById(SelectControlID);
177      var i;
178      for (i = elSel.length - 1; i>=0; i--) {
179        if (elSel.options[i].selected) {
180          elSel.remove(i);
181        }
182      }
183    }
184
185    function appendOptionLast(num)
186    {
187      var elOptNew = document.createElement('option');
188      elOptNew.text =  num;
189      elOptNew.value =num;
190      var elSel = document.getElementById(SelectControlID);
191
192      try {
193        elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
194      }
195      catch(ex) {
196        elSel.add(elOptNew); // IE only
197      }
198    }
199
200    function removeOptionLast()
201    {
202      var elSel = document.getElementById(SelectControlID);
203      if (elSel.length > 0)
204      {
205        elSel.remove(elSel.length - 1);
206      }
207    }
208    function getOption(split)
209    {
210    if(!split)
211        split = ',';
212      var elSel = document.getElementById(SelectControlID);
213      var i;
214      var str='';
215      for (i = elSel.length - 1; i>=0; i--) {
216        str+=elSel.options[i].value+split;
217      }
218      return str;
219    }
220     function CheckOption(value)
221    {
222      var elSel = document.getElementById(SelectControlID);
223      var i;
224      for (i = elSel.length - 1; i>=0; i--) {
225        if(elSel.options[i].value == value)
226            return true;
227      }
228      return false;
229    }
230 //-->
231</script>";
232        #endregion
233    }
234}
235
使用方法如下:
在页面中加入上面的控件,ID为:FileUpLoadEx1
 
使用方法code
 1if (FileUpLoadEx1.Count == 0)
 2            {
 3                InfoTips = "请选择要上传的文件.";
 4                return;
 5            }
 6            HttpFileCollection files = HttpContext.Current.Request.Files;
 7            bool IsError = false;
 8            foreach (int i in FileUpLoadEx1.FileIndex)
 9            {
10                try
11                {
12                    uploadfile(files[i], folder);
13                    InfoTips = string.Format("文件\"{0}\"上载成功!", files[i].FileName);
14                }
15                catch (Exception ee)
16                {
17                    IsError = true;
18                    InfoTipsLog.Exception(string.Format("文件\"{0}\"上载出错!错误:{1}", files[i].FileName, ee.Message));
19                    logInfo.Exception(ee);
20                }
21            }
22            if (!IsError)
23                Return("上载成功.");

转载于:https://www.cnblogs.com/LifelongLearning/archive/2008/07/16/1244711.html

asp .net 多文件上传(二)相关推荐

  1. [转载]ASP.NET Core文件上传与下载(多种上传方式)

    ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...

  2. ASP.NET中文件上传下载方法集合

    asp.net 2008-08-23 21:10:35 阅读0 评论0   字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...

  3. ASP.NET Core文件上传IFormFile于Request.Body的羁绊

    前言 在上篇文章深入探究ASP.NET Core读取Request.Body的正确方式[1]中我们探讨了很多人在日常开发中经常遇到的也是最基础的问题,那就是关于Request.Body的读取方式问题, ...

  4. WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

    目录 知识点 详细点 文件二次渲染 php删除规则 例题 CTF-Web入门-162 CTF-Web入门-163 CTF-Web入门-164 CTF-Web入门-165 CTF-Web入门-166 C ...

  5. Asp.NET大文件上传组件开发总结(二)---提取文件内容

    不知地震什么时候结束,为了给老婆小孩守夜,看来还不能睡,那就把第二篇也写了吧,只是不知对大家有没有用哟. 为了提供文件内容,我们需要首先需确定客户请求中发送的有文件内容,然后确定文件内容的位置.这部分 ...

  6. 【转】Asp.NET大文件上传组件开发总结(二)---提取文件内容

    为了提供文件内容,我们需要首先需确定客户请求中发送的有文件内容,然后确定文件内容的位置.这部分对应的代码如下: 1HttpApplication app = sender as HttpApplica ...

  7. ASP.NET Core文件上传与下载(多种上传方式)

    前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经 ...

  8. ASP.NET MVC 文件上传和文件下载 以及 文件下载的几种方法

    1.序言 最近项目中需要用到这个功能点,但是网上下载的时候总是出现乱码.所以趁着这个时间自己整理出了一份,以后需要的时候就直接看自己的博客就行了.已经测试过:在谷歌.火狐.IE等浏览器上都不会出现乱码 ...

  9. ASP.NET实现文件上传

    新建ASP.NET Web应用程序 单文件上传 效果 页面代码 <%@ Page Language="C#" AutoEventWireup="true" ...

  10. [asp常用代码]文件上传代码

    调用实例: UploadDemo.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">& ...

最新文章

  1. 三国志幻想大陆服务器维护,三国志幻想大陆8月14日更新维护公告
  2. pycharm怎么写yaml_K8S 如何面向 Yaml 编程
  3. Post和Get差异
  4. 纪中集训 Day 3
  5. 什么是顺序执行以及其特点
  6. 阿里免费开放一切AI算力的背后是什么?
  7. php 搭建laravel,laravel框架_搭建php Laravel框架教程详解
  8. java生成iso9660工具_UltraISO 软碟通 (ISO编辑工具)
  9. 造DPU芯片,如梦幻泡影?丨虚构短篇小说
  10. 讲的是切片,但好像又不只是切片?
  11. UnityShader(四)基础光照
  12. Unity:计算两个物体(没有父子关系)的相对坐标
  13. 研究:骇客又在合法的苹果Xcode专案上植入恶意程式
  14. 文本检测算法性能对比
  15. 赛马比赛:25匹马,5个赛道,选出跑的快的前几匹
  16. Binder之AIDL进程间通信的使用(附源码)
  17. 电厂/矿井UWB室内定位解决方案
  18. 如何打造元宇宙NFT头像?教你玩点新鲜的!
  19. 视频教程-Java学习指南(Swing高级篇)-Java
  20. 自己动手写操作系统 将引导程序成功写入优盘启动电脑

热门文章

  1. URAL 1132 Square Root(二次剩余定理)题解
  2. 042 实例10-文本词频统计
  3. 启用nginx报错80端口被占用
  4. 【译】RabbitMQ:Topics
  5. Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(1)
  6. html 数组输入框,javascript输入数组
  7. Android 隐藏环形进度条,Android环形进度条
  8. (转)MySQL慢查询分析优化 + MySQL调优
  9. linux windows下重启oracle
  10. SQL Server将DataTable传入存储过程(Table Value Parameter)