65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 中的多文件上传自定义控件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.44/5 (9投票s)

2009年9月23日

CPOL

1分钟阅读

viewsIcon

72582

downloadIcon

3094

.NET 中已经有一个可用于单文件上传的控件。但在某些情况下,我们实际需要应用程序中多个和批量选择的文件上传功能,为了实现这个功能,我想出了一个能极大帮助开发者的解决方案。

引言

我们有一个场景,需要一次点击选择多个文件进行上传。在 Google 上搜索了很久之后,我在 Code Project 上找到了所需的解决方案。我得到的解决方案并非直接可用,我费了很大劲才将该解决方案适配到我的架构中。因此,我对代码进行了一些更改,这帮助我实现了多文件上传功能并获得了预期的输出。

Using the Code

以下是使其为你工作需要遵循的步骤:

  1. Upload.csUpload2.cs 复制到你的 app_code 中。
  2. 在你的网站中引用 flash.dll。它将出现在 bin 文件夹中。
  3. 在你的代码隐藏页面的页面加载事件中,复制这段代码
    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); 
        }
  4. 在你希望控件显示的 ASPX 页面的顶部添加此标签
    &lt %@ Register Assembly="FlashUpload" Namespace="FlashUpload" 
    	TagPrefix="FlashUpload" %&gt 
  5. 在 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 >
  6. 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 日:首次发布
© . All rights reserved.