我想使用ajax将文件上传到ASP.Net MVC控制器
我的JavaScript代码看起来像这样,基本上每次用户更改输入值时,它都会自动将文件上传到控制器
var formdata = false;
if (window.FormData) {
formdata = new FormData();
}
$('input[name=default_export_filename]').change(function() {
var i = 0, len = this.files.length, img, reader, file;
for ( ; i < len; i++ ) {
file = this.files[i];
if (file.type.match(/spreadsheet/) || file.type.match(/ms-excel/)) {
if ( window.FileReader ) {
reader = new FileReader();
reader.onloadend = function (e) {
//showUploadedItem(e.target.result, file.fileName);
};
reader.readAsDataURL(file);
}
if (formdata) {
formdata.append("default_export_filename", file);
}
}
}
if (formdata) {
$.ajax({
url: root + mod + '/uploaddef',
type: "POST",
data: formdata,
processData: false,
contentType: false,
success: function (res) {
console.log(res);
}
});
}
});
在控制器端,我无法使用此
捕获该文件 [HttpPost]
public ActionResult UploadDEF(HttpPostedFileBase file)
{
var jsonData = new
{
response = 3
};
return Json(jsonData); ;
}
或者这个
[HttpPost]
public ActionResult UploadDEF(FormCollectionfile)
{
var jsonData = new
{
response = 3
};
return Json(jsonData); ;
}
file参数始终为null。但在firebug中,我可以看到浏览器正在将文件发布到服务器。我应该用什么对象来捕获文件?
我意识到旧浏览器不支持FormData对象,但我的客户端都使用最新的浏览器。所以这不是问题。
答案 0 :(得分:3)
问题解决了。
事实证明,我不必为控制器的方法提供任何参数。这些文件可通过Request对象获得。
全部谢谢
答案 1 :(得分:1)
您不能使用ajax POST上传这样的文件,必须是表单提交。
查看AjaxUploadify或类似的组件。