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

时间:2011-04-01 02:15:58

标签: c# asp.net html file upload

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

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

6 个答案:

答案 0 :(得分:5)

由于安全问题,<input type="file">被网络浏览器严重锁定。它不允许多个文件选择。您需要使用Flash或Silverlight来执行此操作,或使用多个<input type="file">字段。

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

另外,HTML 5将支持多个文件上传,但在当前的网络浏览器中并没有广泛实现,因此不是一种选择。

答案 1 :(得分:5)

如下所示设置属性“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;
    }
}

答案 2 :(得分:5)

我们一直在使用下面的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版本无关。

答案 3 :(得分:1)

正如贾斯汀所说,你必须使用Flash或Silverlight。我选了后两者,我很高兴。

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

答案 4 :(得分:-1)

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

<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

答案 5 :(得分:-1)

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