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

Ron*_*rby 14 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;">
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何从asp.net操纵这些文件.我尝试使用Request.Files作为以下链接指示: ASP.Net从jQuery中选择它们后上传多个文件

这不起作用.我认为这只适用于在编译时用runat ="server"标记的控件.

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

谢谢你的帮助!

Chr*_*nes 5

要检查两件事:

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

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


Ron*_*rby 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.)在Web表单上引用多文件插件(在此处下载):

<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);
    }
Run Code Online (Sandbox Code Playgroud)

这就是我必须要做的就是将多个文件附加到从aspx页面发送的电子邮件中.

如果要增加可上载文件的总大小,请将其添加到web.config文件中:

<system.web>
    <httpRuntime executionTimeout="240" maxRequestLength="30720"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)

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


Tom*_*Tom 2

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