ASP.net - 使用jQuery多文件上传插件进行多次上传

时间:2009-02-18 20:31:09

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

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

我想要做的是使用这个jQuery多文件上传插件上传多个文件。

以下是选择上传多个文件时的功能:

<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中的东西......?

感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

要检查两件事:

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

此外,runat =“server”不应与Request.Files是否有效有关 - 这更像是浏览器实际发布文件的问题。

答案 1 :(得分:5)

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

因此,文件未发布。

我构建了自己的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.。)在网络表单(Download it here)上引用多文件插件:

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

3。)在您的网络表单上添加一个文件输入,其中class =“multi”:

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

修改
如果你不想使用flash Ajax Upload也很好。如果我网站公司网站上的用户没有最适合uploadify的闪存版本,我会切换到Ajax上传。它们对我来说都很好。