HTML5 Valums Ajax 文件上传的 ASP.NET 服务器端处理程序






4.55/5 (14投票s)
Valums ajax 上传的处理程序实现;一个 HTML 5 文件上传器支持多文件上传,带有进度条和拖放功能
引言
这个 Ajax 上传器使用 XHR 上传多个文件,并在 FF3.6+、Safari4+ 和 Chrome 中显示进度条,而在其他浏览器中则回退到基于隐藏 iframe 的上传,从而在所有地方提供良好的用户体验。您还可以在 Valums 网站上查看 PHP 演示:http://valums.com/ajax-upload/。

背景
目前的实现具有 Java、PHP 和 Perl 的服务器端处理程序。但是,没有 ASP.NET 处理程序。在这里,我实现了一个 ASP.NET 处理程序,用于 Ajax 文件上传,支持 Internet Explorer、Firefox 和 Chrome。
Using the Code
问题在于 Internet Explorer 使用 context.Request.Files[]
将文件发送到服务器。但是 Firefox 和 Chrome 使用 Context.Request.InputStream
。因此,在处理程序中,您需要同时检查两者以读取流。
对于 Firefox 和 Chrome,您可以从标头中获取 fileName
,如下所示
String filename = HttpContext.Current.Request.Headers["X-File-Name"];
在 Firefox 和 Chrome 中有效的代码如下
//This works for Firefox and Chrome.
Stream inputStream =
HttpContext.Current.Request.InputStream;<br />FileStream fileStream = new
FileStream(mapPath + "\\" + filename,
FileMode.OpenOrCreate);inputStream.CopyTo(fileStream);fileStream.Close();
context.Response.Write("{success:true, name:\"" + filename + "\", path:\"" +
path + "/" + filename + "\"}");
但是对于 Internet Explorer,您需要使用
HttpPostedFile uploadedfile = context.Request.Files[0];
适用于 Internet Explorer 浏览器的代码是
HttpPostedFile uploadedfile = context.Request.Files[0];
filename = uploadedfile.FileName;
uploadedfile.SaveAs(mapPath + "\\" + filename);
context.Response.Write("{success:true, name:\"" + filename + "\", path:\"" +
path + "/" + filename + "\"}");
这里响应以 JSON 字符串
的形式发送,您将获得 JSON 对象作为响应。您需要发送 {success:true}
以使 Ajax 上传了解文件上传是否成功,否则您可以发送 false
。
历史
- 2011 年 5 月 27 日:初始发布