14

我知道如何使用 ASP.net 的 FileUpload 控件进行上传。

我想要做的是使用这个 jQuery Multiple File Upload Plugin 来上传多个文件。

这正是选择多个文件进行上传时的作用:

<input type="file class="multi MultiFile" id="MultiFile1_F3" name="file1[]" style="position: absolute; top: -3000px;">

但我无法弄清楚如何从 asp.net 操作这些文件。我尝试使用 Request.Files,如下链接所示: ASP.Net Upload of multiple files after selections from jQuery

那是行不通的。我认为这只适用于在编译时标有 runat="server" 的控件。

有谁知道如何做到这一点?也许 Request.Form 中的东西......?

谢谢你的帮助!

4

4 回答 4

5

要检查的两件事:

  • 确保您的表单设置了 enctype="multipart/form-data" 属性。这是启用上传所必需的。
  • 确保所有文件输入都设置了 id 和 name 属性。出于某种原因,如果您不同时设置两者,就会发生奇怪的事情。

此外, runat="server" 与 Request.Files 是否有效无关 - 这更多是浏览器实际发布文件的问题。

于 2009-02-20T00:55:17.973 回答
5

这个 jQuery 插件为每个生成的输入控件提供了完全相同的名称属性。

出于这个原因,这些文件没有发布。

我构建了自己的 javascript 解决方案。

我将在评论中发布代码的链接。

编辑

我重新审视了这一点,发现我想做的事情一点也不难。我得到了 jquery 多文件上传插件,可以在我的 aspx 表单中正常工作。我不知道为什么我以前遇到这么多麻烦。

1.) 在 Web 表单中包含 jQuery 库:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" />

2.) 参考网络表单上的多文件插件(在此处下载):

<script src="jquery.MultiFile.pack.js" type="text/javascript">

3.) 使用 class="multi" 在您的 Web 表单上添加文件输入:

<input type="file" class="multi" />

4.) 在表单提交时执行一些代码或调用这样的方法:

    void SendMail(string from, string to, string subject, string body, string smtpServer)
    {
        // create mail message
        MailMessage mail = new MailMessage(from, to, subject, body);

        // attach posted files
        for (int i = 0; i < Request.Files.Count; i++)
        {
            HttpPostedFile file = Request.Files[i];
            mail.Attachments.Add(new Attachment(file.InputStream, file.FileName));
        }

        //send email
        new SmtpClient(smtpServer).Send(mail);
    }

这就是我将多个文件附加到从 aspx 页面发送的电子邮件中所要做的全部工作。

如果您想增加可以上传的文件的总大小,请将其添加到您的 web.config 文件中:

<system.web>
    <httpRuntime executionTimeout="240" maxRequestLength="30720"/>
</system.web>

executionTimeout 以秒为单位,maxRequestLength 以千字节为单位。在此示例中,请求将在 4 分钟后超时,并允许 30mb 请求。

于 2009-02-20T20:13:48.877 回答
2

自从我在 .NET 中做那种事情以来已经有一段时间了,但是一旦你开始动态地克隆表单输入,我认为你必须去 Request.Form 并手动查找提交的值。我编写了 jQuery 代码来克隆一些带有顺序标识符的(非文件)输入。只要您有唯一的标识符,您就可以运行一个循环来查看 Request.Form["MultiFile1_F" + counter] 是否存在并从那里开始。

于 2009-02-18T20:38:50.280 回答
2

我强烈推荐Uploadify作为一个多文件上传器。它使用 jquery 和 flash 允许用户通过 ctrl + 单击所有需要的文件一次上传多个文件。然后它会显示一个文件上传队列,并在完成时从队列中删除文件。它还允许您指定允许用户上传的扩展名,从而避免您进行扩展名验证。

编辑:
如果你不想使用 flash Ajax Upload也很有效。如果我的网站公司网站上的用户没有最适合 uploadify 的正确版本的 flash,我会切换到 Ajax Upload。他们都对我工作得很好。

于 2009-12-22T21:57:13.503 回答