在 .NET MVC 3 项目中,我一直在为 AJAX 文件上传而苦苦挣扎,并且在研究过程中发现了几个问题。
首先,Stack Overflow 上似乎有很多问题表明无法通过 AJAX 上传文件。我认为所有这些答案都来自 XMLHttpRequest Level 2 规范之前的时间,但现在更新它们可能是个好主意。
考虑到我当前的问题,我正在尝试管理上传到我的控制器中,但是我遇到了很大的困难,因为我无法使用 HttpPostedFileBase 加载上传的文件(就像我在普通表单文件上所做的那样上传)。
我的问题是……为什么会这样?我的意思是...当您通过 AJAX 发送文件时,发送到服务器的 POST 包含与通过表单发送文件时相同的信息,不是吗?并且文件仍然在 Request.Files 中,然后......为什么控制器不能将该信息绑定到作为参数传递给控制器的 HttpPostedFileBase 实例?
编辑:我按照评论中的建议添加了 AJAX 上传代码示例:
$("#uploadButton").click(function () {
if (window.FormData) {
var theFile = $('input[type="file"]').get(0).files[0];
var formData = new window.FormData();
formData.append("importedFile", theFile);
$.ajax({ async: false,
url: $.url("Courses/Import/"),
type: "POST",
data: formData,
cache: false,
processData: false,
contentType: "multipart/form-data",
success: function (res) {
$("#response").innerHTML = res;
}
});
return false;
}
});
在服务器端,控制器:
[HttpPost]
public ActionResult Import(HttpPostedFileBase importedFile) {
//Here importedFile is null, however Request.Files[0] contains the uploaded file.
}