我知道如何使用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中的东西......?
感谢您的帮助!
答案 0 :(得分:5)
要检查两件事:
此外,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上传。它们对我来说都很好。