文件API文件上载 – 在ASP.NET MVC中读取XMLHttpRequest

我正在尝试在ASP.NET MVC中实现Gmail样式拖放文件上传。

我一直关注这篇文章: http : //robertnyman.com/html5/fileapi-upload/fileapi-upload.html并希望将上传的文件发布到MVC控制器操作。

为此,我修改了链接中的示例JavaScript脚本以指向我的控制器操作:

xhr.open("post", "/home/UploadFiles", true); 

这是我的控制器动作:

 [HttpPost] public virtual string UploadFiles(object obj) { var length = Request.ContentLength; var bytes = new byte[length]; Request.InputStream.Read(bytes, 0, length); // var bytes has byte content here. what do do next? return "Files uploaded!"; } 

我设置了一个断点,当我上传文件时,断点被击中 – 这很好。 但是如何从上传的(javascript)XMLHttpRequest对象中提取数据? 我不认为它在HttpRequest中 – 它是参数吗? 如果是这样,我应该期待什么类型以及如何提取字节数组并从中提取上传的文件信息?

(我正在使用Chrome – 我知道它在IE中不起作用)

任何建议将不胜感激!

弄清楚了。 这是C#代码:

 [HttpPost] public virtual string UploadFiles(object obj) { var length = Request.ContentLength; var bytes = new byte[length]; Request.InputStream.Read(bytes, 0, length); // bytes has byte content here. what do do next? var fileName = Request.Headers["X-File-Name"]; var fileSize = Request.Headers["X-File-Size"]; var fileType = Request.Headers["X-File-Type"]; var saveToFileLoc = string.Format("{0}\\{1}", Server.MapPath("/Files"), fileName); // save the file. var fileStream = new FileStream(saveToFileLoc, FileMode.Create, FileAccess.ReadWrite); fileStream.Write(bytes, 0, length); fileStream.Close(); return string.Format("{0} bytes uploaded", bytes.Length); } 

这是Javascript代码:

  

这很棒。 稍微改善:

 xhr.setRequestHeader("X-File-Name", file.name); xhr.setRequestHeader("X-File-Size", file.size);