【问题标题】:ASP.net - Multiple Upload with jQuery Multiple File Upload PluginASP.net - 使用 jQuery 多文件上传插件进行多次上传
【发布时间】:2010-10-08 10:35:57
【问题描述】:

我知道如何使用 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 choosing them from jQuery

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

有人知道怎么做吗?可能是 Request.Form...?

感谢您的帮助!

【问题讨论】:

  • 我觉得这个问题被浏览了 1500 次却没有人投票,这很有趣。
  • ASP.net 对我来说太具体了。我真的在寻找“多文件上传 jquery”

标签: asp.net jquery file-upload multifile-uploader


【解决方案1】:

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

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

【讨论】:

  • 据我所知,Flash 上传器存在一个错误,该错误会从 IE 向上传 URL 发送持久性 cookie,而不是来自浏览器的 cookie。这可能会破坏框架功能,例如 asp.net 的表单身份验证机制。
  • 是的,但是有几个解决这个错误的方法,在 stackoverflow 上的其他几个“fileuploader”问题中已经提到过
【解决方案2】:

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

因此,文件没有发布。

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

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

编辑

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

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

2.) 引用网页表单上的多文件插件(Download it here):

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

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 请求。

【讨论】:

  • 我仍然只得到 1 个文件,唯一的区别是我的 j 查询版本更高?
【解决方案3】:

要检查两件事:

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

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

【讨论】:

  • 我检查了这两件事,但没有帮助。
  • 这对我有用 - 我的文件输入元素没有名称或 ID - 奇怪!谢谢克里斯!
【解决方案4】:

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

【讨论】:

  • 这个问题是 Request.Form["MultiFile1_FN"] 返回一个字符串。这种东西非常适合普通的 HTML 文本框。
  • 啊,呃。当您发送 x # 个文件时,Request.Files 的长度是多少?
  • Request.Files 的长度为零。
猜你喜欢
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 2014-05-04
  • 2019-01-29
相关资源
最近更新 更多