Introduction
This Ajax uploader uses XHR for uploading multiple files with progress-bar in FF3.6+, Safari4+, Chrome and falls back to hidden iframe based upload in other browsers, providing good user experience everywhere. You can also see PHP demo in Valums site at http://valums.com/ajax-upload/.
Background
The current implementation has server side handler for Java, PHP and Perl. But ASP.NET handler does not exist. Here, I have implemented an ASP.NET handler for Ajax file upload that supports Internet Explorer, Firefox and Chrome.
Using the Code
The problem is that Internet Explorer uses context.Request.Files[]
for sending file to server. But Firefox and Chrome use Context.Request.InputStream
. So in handler, you need to check both for reading stream.
For Firefox and Chrome, you get fileName
from header like:
String filename = HttpContext.Current.Request.Headers["X-File-Name"];
Code that works in Firefox and Chrome is as follows:
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 + "\"}");
But for Internet Explorer, you need to use:
HttpPostedFile uploadedfile = context.Request.Files[0];
Code that works for Internet Explorer browser is:
HttpPostedFile uploadedfile = context.Request.Files[0];
filename = uploadedfile.FileName;
uploadedfile.SaveAs(mapPath + "\\" + filename);
context.Response.Write("{success:true, name:\"" + filename + "\", path:\"" +
path + "/" + filename + "\"}");
Here the response is sent as JSON string
and you will get JSON object as response. You need to send {success:true}
to make Ajax upload understand that file upload is successful, otherwise you can send false
.
History
- 27th May, 2011: Initial post