使用FormData上传的文件在服务器端变为空
问题描述:
我需要使用Ajax将其他几个输入数据连同上传到ASP.NET MVC。我做了以下来实现:使用FormData上传的文件在服务器端变为空
var formData=new FormData();
formData.Append("uploadedFile",$('input[type="file"]')[0].files[0]);
$.ajax({
url: "/Test/TestFormData",
data: formData,
cache: false,
contentType: false,
processData: false,
dataType:"json",
type: 'POST'
});
我无法弄清楚如何处理这种与适当的模型绑定的服务器端(如果这是以往任何时候都可以),所以我决定通过键搜索表格去:
public class TestControler:Controller
public void TestFormData(){
var file=Request.Form["uploadedFile"];//file is null here
}
问题是file
当我尝试访问它时为空。这里的请求头和有效载荷:
有什么额外的我必须做的就是在服务器端的文件?
答
@Stephen Muecke的回复经常帮助我找到解决方案。虽然我没有得到我需要的100%,但总比没有好。我完成了@Stephen在this answer中的建议,但在我的情况下它并没有帮助。对于原因没有任何线索。所以这就是我最终得到的结果:
var formData=new FormData();
formData.append("uploadedFile",$('input[type="file"]')[0].files[0]);
var doc={};
doc.Subject="TestSubject";
doc.DocBody="Test body";
doc.Receiver="[email protected]";
formData.append('doc',JSON.stringify(doc));
public class TestControler:Controller
public void TestFormData(HttpPostedFileBase uploadedFile){
var doc=Request.Form["doc"];
}
正如你所看到的,我可以从不同的地方访问上传的文件和doc对象。参数名称必须与我们在客户端附加到formData的参数名称匹配,否则参数将为空。不知道为什么,但是如果我添加另一个名为doc
的参数不起作用。我的意思是它是空的,这就是为什么我必须通过Form["doc"]
访问它。
从这个[link](http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html#) – Lali
获取帮助不幸的是,您提供的链接中的人使用iFrame来达到此目的。除了它是PHP。 –
它只是简单地包含参数在您的POST方法 - 公共ActionResult TestFormData(HttpPostedFileBase uploadedFile)',如果你有一个窗体,那么你可以使用'var formdata = new FormData($('form')。get 0));'这将序列化窗体和任何文件输入(参考[这个答案](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata -and-obtain-it-in-mvc/29293681#29293681)) - 尽管你的行为似乎没问题 –