asp .net 多文件上传(二)
在上篇asp .net 多文档上传控件实现的多文件上载控件,在上载文件太大的时候,就会出现“文件已经关闭”的错误,现在这个版本,重新实现修改原来的方式,可以上载任意大小的文件,并且在添加文件时也不用回调服务端,删除文件时,也会动态的删除选择的文件,截图如下:
选择文件:
上载成功:
源码
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 <input type='button' value='增加' οnclick='addFile()' />
92 <input type='button' value='删除'
93 οnclick='javascript:removeOptionSelected()' />
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
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 多文件上传(二)相关推荐
- [转载]ASP.NET Core文件上传与下载(多种上传方式)
ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...
- ASP.NET中文件上传下载方法集合
asp.net 2008-08-23 21:10:35 阅读0 评论0 字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...
- ASP.NET Core文件上传IFormFile于Request.Body的羁绊
前言 在上篇文章深入探究ASP.NET Core读取Request.Body的正确方式[1]中我们探讨了很多人在日常开发中经常遇到的也是最基础的问题,那就是关于Request.Body的读取方式问题, ...
- WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀
目录 知识点 详细点 文件二次渲染 php删除规则 例题 CTF-Web入门-162 CTF-Web入门-163 CTF-Web入门-164 CTF-Web入门-165 CTF-Web入门-166 C ...
- Asp.NET大文件上传组件开发总结(二)---提取文件内容
不知地震什么时候结束,为了给老婆小孩守夜,看来还不能睡,那就把第二篇也写了吧,只是不知对大家有没有用哟. 为了提供文件内容,我们需要首先需确定客户请求中发送的有文件内容,然后确定文件内容的位置.这部分 ...
- 【转】Asp.NET大文件上传组件开发总结(二)---提取文件内容
为了提供文件内容,我们需要首先需确定客户请求中发送的有文件内容,然后确定文件内容的位置.这部分对应的代码如下: 1HttpApplication app = sender as HttpApplica ...
- ASP.NET Core文件上传与下载(多种上传方式)
前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经 ...
- ASP.NET MVC 文件上传和文件下载 以及 文件下载的几种方法
1.序言 最近项目中需要用到这个功能点,但是网上下载的时候总是出现乱码.所以趁着这个时间自己整理出了一份,以后需要的时候就直接看自己的博客就行了.已经测试过:在谷歌.火狐.IE等浏览器上都不会出现乱码 ...
- ASP.NET实现文件上传
新建ASP.NET Web应用程序 单文件上传 效果 页面代码 <%@ Page Language="C#" AutoEventWireup="true" ...
- [asp常用代码]文件上传代码
调用实例: UploadDemo.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">& ...
最新文章
- 三国志幻想大陆服务器维护,三国志幻想大陆8月14日更新维护公告
- pycharm怎么写yaml_K8S 如何面向 Yaml 编程
- Post和Get差异
- 纪中集训 Day 3
- 什么是顺序执行以及其特点
- 阿里免费开放一切AI算力的背后是什么?
- php 搭建laravel,laravel框架_搭建php Laravel框架教程详解
- java生成iso9660工具_UltraISO 软碟通 (ISO编辑工具)
- 造DPU芯片,如梦幻泡影?丨虚构短篇小说
- 讲的是切片,但好像又不只是切片?
- UnityShader(四)基础光照
- Unity:计算两个物体(没有父子关系)的相对坐标
- 研究:骇客又在合法的苹果Xcode专案上植入恶意程式
- 文本检测算法性能对比
- 赛马比赛:25匹马,5个赛道,选出跑的快的前几匹
- Binder之AIDL进程间通信的使用(附源码)
- 电厂/矿井UWB室内定位解决方案
- 如何打造元宇宙NFT头像?教你玩点新鲜的!
- 视频教程-Java学习指南(Swing高级篇)-Java
- 自己动手写操作系统 将引导程序成功写入优盘启动电脑
热门文章
- URAL 1132 Square Root(二次剩余定理)题解
- 042 实例10-文本词频统计
- 启用nginx报错80端口被占用
- 【译】RabbitMQ:Topics
- Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(1)
- html 数组输入框,javascript输入数组
- Android 隐藏环形进度条,Android环形进度条
- (转)MySQL慢查询分析优化 + MySQL调优
- linux windows下重启oracle
- SQL Server将DataTable传入存储过程(Table Value Parameter)