在 ASP.NET 4.0 环境下使用 c# 进行多文件上传

Posted

技术标签:

【中文标题】在 ASP.NET 4.0 环境下使用 c# 进行多文件上传【英文标题】:Multi file upload using c# on ASP.NET 4.0 environment 【发布时间】:2011-07-27 09:09:43 【问题描述】:

我正在寻找上传多个文件的解决方案(点击浏览按钮,然后使用 shift 键选择多个文件)。

我看到几个解决方案需要通过点击浏览按钮一一上传,然后点击提交按钮。但我需要允许用户同时选择多个文件。

【问题讨论】:

【参考方案1】:

如下设置属性“AllowMultiple = true”。此属性适用于 4.5 框架。

 <asp:FileUpload ID="file_upload" runat="server" AllowMultiple="true" />

这将允许您一次选择多个文件

aspx代码:

<form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="file_upload" runat="server" AllowMultiple="true" />
        <asp:Button ID="btnFileUpload" runat="server" Text="Upload" OnClick="btnFileUpload_Click" />
        <asp:Label ID="lblUploadStatus" runat="server"></asp:Label>
    </div>
</form>

aspx.cs 代码:

protected void btnFileUpload_Click(object sender, EventArgs e)

    try
    
        if (file_upload.HasFile && file_upload.PostedFiles.All(x => x.ContentType == "image/jpeg" && x.ContentLength < 102400))
        
            foreach (var file in file_upload.PostedFiles)
            
                file_upload.SaveAs(Server.MapPath("~/") + Path.GetFileName(file.FileName));
            
            lblUploadStatus.Text = "File(s) uploaded successfully.";
        
        else
        
            lblUploadStatus.Text = "Please upload proper file.";
        
    
    catch (Exception ex)
    
        lblUploadStatus.Text = "Error in uploading file." + ex.Message;
    

【讨论】:

AllowMultiple 属性只能由 .Net 4.5 的用户访问,因此如果您只针对 4.0 框架,它将无法工作。如果您使用的是 4.0,则无法在不使用上述方法之一的情况下将 FileUpload 字段设置为允许多个文件。 @MattD 是的,我忘了提到我正在使用的框架 别担心,我只是想提一下,以免别人头痛。不能在我所在的地方使用 4.5,所以你提到的属性对我来说没用,但我也必须使用 IE9,这意味着即使是通用 html 控件的 multiple 属性也不会'不工作。 :(【参考方案2】:

我们一直在使用下面的 jQuery 插件来帮助我们。

jQuery Multiple File Upload Plugin

包含必要的js文件后:jQuery.multifile.pack.js,我们可以像下面这样使用它。

<input type="file" id="flAttachment" runat="server" tabindex="8" class="multi max-3 accept-gif|jpg|xlsx|xls|doc|docx|pdf|png" size="37" />

提供class="multi" 使其接受多个文件。

您也可以根据需要应用约束。像class = "max-3" 将允许最多上传三个文件。 class = "accept-gif|jpg" 只允许上传具有gifjpg 扩展名的文件。

要在服务器端获取多个文件,您需要包含 namespaceSystem.Web;

然后你可以使用下面的代码来遍历每个上传的文件。

if (Request.Files.Count > 0)

    HttpFileCollection attachments = Request.Files;
    for (int i = 0; i < attachments.Count; i++)
    
        HttpPostedFile attachment = attachments[i];
        if (attachment.ContentLength > 0 && !String.IsNullOrEmpty(attachment.FileName))
        
            //do your file saving or any related tasks here.
        
    

这与.net framework 版本无关。

【讨论】:

这不起作用。文件上传上的SaveAs保存第一个文件的相同内容,只是用新的文件名【参考方案3】:

出于安全考虑,&lt;input type="file"&gt; 被网络浏览器严重锁定。它不允许选择多个文件。您需要使用 Flash 或 Silverlight 来执行此操作,或使用多个 &lt;input type="file"&gt; 字段。

您可以允许用户选择一个文件,然后提供一个“添加另一个文件”按钮,该按钮使用 jQuery 生成另一个文件上传输入。您可以通过这种方式允许无限数量的上传,但用户必须单独浏览每个上传。

附带说明,HTML 5 将支持多文件上传,但它在当前的网络浏览器中并未广泛实现,因此不是一个选项。

【讨论】:

很好的概述。我个人推荐 Flash。 任何链接可用于实现 Flash / Silver light?用户需要下载flash和/或silver light客户端吗?【参考方案4】:

正如贾斯汀所说,您必须使用 Flash 或 Silverlight。我拿了两者中的后者,非常高兴。

看看 Codeplex 上的Silverlight Multi File Uploader。这是我用过的,而且很棒。它也很容易定制以满足您的需求。到目前为止,它已经为我上传了大约 10,000 张图片,而且从未错过任何一个节拍。

【讨论】:

【参考方案5】:

您可以使用 JQeryFileUpload 的拖放功能,我们将它用于我们的 CMS 并且我们的用户似乎对解决方案感到满意,您可以尝试演示站点 here。只需删除任意数量的文件并查看它的实际效果,它是高度可定制的。

【讨论】:

【参考方案6】:

你只需要像这样添加多个属性

<input type="file" name="postedFiles" id="InvoiceAttachmentsFiles" multiple="multiple" />

查看本站

http://www.aspdotnet-suresh.com/2012/12/aspnet-upload-multiple-files-using.html

你也可以用这个

http://www.dotnetfunda.com/articles/article1062-fileupload-uploading-file-to-the-server-without-clicking-a-button.aspx

【讨论】:

以上是关于在 ASP.NET 4.0 环境下使用 c# 进行多文件上传的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 ASP.NET 4.0 GridView 上启用分页和排序?

能说一下ADO.NET 和.NET,还有asp.NET的区别吗?

如何在 ASP.NET 4.0 中进行 301 重定向?

SELECT2 4.0 与 ASP.Net 中的多选:如何获取和设置所选项目?

HTTP 错误 503。该服务在简单的 ASP.NET 4.0 网站下不可用

在 ASP.NET 中针对 SQL Compact 4.0 执行/查询