asp.net 动态添加多附件上传.
最近有人问起动态多文件上传,想要做到类似于邮箱添加附件的效果,这个功能其实比较简单,就是往form中添加file元素。在用户选择完文件后,再添加一个file控件,由于file控件过多,视觉上不好看,所以隐藏之前的控件,保持页面上只有一个控件,同时把文件名添加到附件列表中。
注意:页面上初始的file控件必须有runat="server"标志。也就是说,这个页面上必须至少有一个runat="server"的file控件,否则后台接收不到Request.Files。
<FORM id="form1" runat="server"> <DIV id="div1"> <INPUT ID="File1" TYPE="file" NAME="File1" runat="server"> <INPUT TYPE="button" VALUE="添加附件" onclick="javascript:AddFile();"> <INPUT TYPE="button" VALUE="删除附件" onclick="javascript:RemoveFile();"> <ASP:LISTBOX id="ListBox1" Width="200px" Height="100px" runat="server"></ASP:LISTBOX> <ASP:BUTTON id="Button1" runat="server" Text="保存" Width="60px"></ASP:BUTTON> </DIV> <ASP:LITERAL ID="lResult" Runat="server"></ASP:LITERAL> </FORM>
<SCRIPT language="javascript"><!-- function AddFile() { var file = document.getElementById("div1").firstChild; if(file.value == "") { alert("请选择文件!"); return; } var ary = file.value.split("/"); var filename = ary[ary.length-1]; var bAddFile = true; if(CheckOptionsExists(filename,document.getElementById("ListBox1"))) { alert("文件已经存在列表中!"); div1.removeChild(file); bAddFile = false; } var f = document.createElement("input"); f.type = "file"; f.name = "file" div1.insertBefore(f,div1.firstChild); if(!bAddFile) { return } var o = new Option(); o.innerText = filename; o.value = file.uniqueID; document.getElementById("ListBox1").appendChild(o); file.style.display = "none"; } function RemoveFile() { var lst = document.getElementById("ListBox1"); if(lst.selectedIndex == -1) { alert("请选择要删除的附件!"); return; } var id = lst.value; div1.removeChild(document.all[id]); lst.removeChild(lst.options[lst.selectedIndex]); div1.firstChild.style.display = ""; } //检查选项是否存在. function CheckOptionsExists(value,ddl) { for(var i=0;i<ddl.options.length;i++) { if(ddl.options[i].innerText == value) { return true; } } return false; } //--> </SCRIPT>
后台代码就比较简单了。没有过多的处理,只是一个简单的保存。
private void Button1_Click(object sender, System.EventArgs e) { for(int i=0;i<Request.Files.Count;i++) { if(Request.Files[i].ContentLength >0) { string filename = System.IO.Path.GetFileName(Request.Files[i].FileName); Request.Files[i].SaveAs(Server.MapPath(filename)); this.ListBox1.Items.Add(new ListItem(filename,filename)); }
this.lResult.Text = "保存成功!"; } }
this.lResult.Text = "保存成功!"; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
2012-02-20 利用Lucene.net搭建站内搜索(3)---创建索引
2012-02-20 利用Lucene.net搭建站内搜索(4)---数据检索
2012-02-20 利用Lucene.net搭建站内搜索(2)---分词技术
2012-02-20 利用Lucene.net搭建站内搜索(1)---了解Lucene.net
2012-02-20 Lucene.net索引文件的并发访问和线程安全性
2012-02-20 影响Lucene索引速度原因以及提高索引速度技巧
2012-02-20 HubbleDotNet 简介 (转)