65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.55/5 (14投票s)

2011年 5月 27日

CPOL

1分钟阅读

viewsIcon

94696

downloadIcon

5548

Valums ajax 上传的处理程序实现;一个 HTML 5 文件上传器支持多文件上传,带有进度条和拖放功能

引言

这个 Ajax 上传器使用 XHR 上传多个文件,并在 FF3.6+、Safari4+ 和 Chrome 中显示进度条,而在其他浏览器中则回退到基于隐藏 iframe 的上传,从而在所有地方提供良好的用户体验。您还可以在 Valums 网站上查看 PHP 演示:http://valums.com/ajax-upload/

AjaxUpload.JPG

背景

目前的实现具有 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 日:初始发布
© . All rights reserved.