我会尽量让这个问题变得简单。我想通过使用 JQuery 的 AJAX 提交上传带有附加表单数据的文件(但也让它与 ie 7 或 ie 8 兼容,并且也是异步的)
如果提交不是通过 JQuery 提交的 AJAX,则该过程可以正常工作。即我做了以下事情:
- 声明 CommonsMultipartResolver
- 在控制器中写了这个处理方法
@RequestMapping(value="/processfileupload", method = RequestMethod.POST) public @ResponseBody String handleFileUpload(UploadForm data, BindingResult result) throws Exception {
....
}
UploadForm 是我绑定到表单的 Spring MVC 表单对象。此外,我将 formObject 绑定在 Spring 的表单标签中,如下所示: enctype="multipart/form-data" .. 等等。
就像我说的,如果它不是通过 JQuery 的 Ajax 调用来完成的,它就可以完美地工作。一旦我尝试使其成为 Ajax 调用,该文件始终为空。
这是通过 JQuery 的 Ajax 调用
函数 submitFileUploadViaAjax() {
$.ajax({
url: "processfileupload",
data: $("#file_upload_form").serialize(),
type: "POST",
processData: false,
contentType: false,
success: function(data) {
$(response).html(data);
},
error: function (xhr, ajaxOptions, thrownError) {
if (xhr.readyState == 0 || xhr.status == 0) {
// not really an error
return;
} else {
alert("XHR Status = "+xhr.status);
alert("Thrown Error = "+thrownError);
alert("AjaxOptions = "+ajaxOptions)
}
}
});
}
我怀疑问题可能是: data: $("#file_upload_form").serialize(),
我已经为那些有类似问题的人阅读了一些建议的解决方案来使用 formData 对象,但已经读到这与 IE 7 或 IE 8 不兼容,这是真的吗?
我还阅读了 JQuery 文件上传插件会起作用(https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional-form-data)但我不确定如果我能够使用spring将表单数据绑定到表单对象然后将其注入控制器的好方法将其连接到spring中。
有没有人对上传文件(相对较小)+有一些表单数据的最佳方式有想法,并且能够在 spring mvc 控制器中使用单个端点来处理这个?该解决方案使其与大多数浏览器兼容,但尤其适用于 ie 7 或 ie 8(这是在这些浏览器中工作的要求。)
非常感谢!
- 罗科