Windows 2008.NET 1.0Windows 7Windows 2003.NET 1.1.NET 3.0ADO.NETWindows 2000设计/图形架构师.NET4高级Windows XP.NET 2.0.NET 3.5C# 2.0初学者C# 3.0C# 4.0中级开发JavascriptWindows.NETASP.NETC#
ASP.NET 中的多文件上传自定义控件






3.44/5 (9投票s)
.NET 中已经有一个可用于单文件上传的控件。但在某些情况下,我们实际需要应用程序中多个和批量选择的文件上传功能,为了实现这个功能,我想出了一个能极大帮助开发者的解决方案。
引言
我们有一个场景,需要一次点击选择多个文件进行上传。在 Google 上搜索了很久之后,我在 Code Project 上找到了所需的解决方案。我得到的解决方案并非直接可用,我费了很大劲才将该解决方案适配到我的架构中。因此,我对代码进行了一些更改,这帮助我实现了多文件上传功能并获得了预期的输出。
Using the Code
以下是使其为你工作需要遵循的步骤:
- 将 Upload.cs 和 Upload2.cs 复制到你的 app_code 中。
- 在你的网站中引用 flash.dll。它将出现在 bin 文件夹中。
- 在你的代码隐藏页面的页面加载事件中,复制这段代码
protected void Page_Load(object sender, EventArgs e) { // allows the JavaScript function to do a postback // and call the onClick method // associated with the linkButton LinkButton1. string jscript = "function UploadComplete() {" + ClientScript.GetPostBackEventReference(LinkButton1, "") + "};"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "FileCompleteUpload", jscript, true); }
- 在你希望控件显示的 ASPX 页面的顶部添加此标签
< %@ Register Assembly="FlashUpload" Namespace="FlashUpload" TagPrefix="FlashUpload" %>
- 在 form 标签内添加以下 ASPX 自定义标签,如下所示
< FlashUpload:FlashUpload ID="flashUpload" runat="server" UploadPage="Upload2.axd" OnUploadComplete="UploadComplete()" FileTypeDescription="All Files" FileTypes="*.gif;*.doc; *.png; *.jpg; *.jpeg" UploadFileSizeLimit="1800000" TotalUploadSizeLimit="2097152" /> < asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" > </ asp:LinkButton >
- 在 web.config 文件中的 system.web 下添加以下给定的标签
<httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=null"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=null"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=null" validate="false"/> < remove verb="POST,GET" path="Upload.axd"/> < add verb="POST,GET" path="Upload.axd" type="Upload"/> < remove verb="POST,GET" path="Upload2.axd"/> < add verb="POST,GET" path="Upload2.axd" type="Upload"/> </httpHandlers>
指定你需要上传到 Web 服务器文件夹的文件类型。这样我们就都设置完成了。构建你的应用程序并运行机器。
结论
以上方法可能会对安全性产生一些影响,可能需要为 Web 服务器中将要保存文件的文件夹授予访问权限。 如果此功能在生产环境中出现问题,请记住这一点。
参考
帮助我实现这一里程碑的参考文章是“使用 Flash 和 ASP.NET 实现带进度条的多文件上传”。感谢作者 darick_c。
历史
- 2009 年 9 月 23 日:首次发布