如何在使用带有多个文件的jquery ajax FormData()时设置multipart / form-data请求的边界
我有一个HTML表单,需要在一个请求中将3个部分上传到现有的REST API。 我似乎无法找到有关如何在FormData提交上设置边界的文档。
我试图按照这里给出的示例: 如何在jQuery中使用Ajax请求发送FormData对象?
但是,当我提交数据时,它会被以下堆栈跟踪拒绝:
Caused by: org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found.
我该如何设置边界?
这是HTML / Javascript:
function handleSubmit() { var jsonString = "{" + "\"userId\":\"" + document.formSubmit.userId.value + "\"" + ",\"locale\":\"" + document.formSubmit.locale.value + "\"" + "}"; var data = new FormData(); data.append('Json',jsonString); data.append('frontImage', document.formSubmit.frontImage.files[0]); data.append('backImage', document.formSubmit.backImage.files[0]); document.getElementById("sent").innerHTML = jsonString; document.getElementById("results").innerHTML = ""; $.ajax({ url:getFileSubmitUrl(), data:data, cache: false, processData: false, contentType: 'multipart/form-data', type:'POST', success:function (data, status, req) { handleResults(req); }, error:function (req, status, error) { handleResults(req); } }); }
这是表格:
在此先感谢您的帮助!
穆萨的反应非常好。 将contentType设置为false确实正确提交了表单数据。 谢谢!
这是一个有效的ajax调用:
$.ajax({ url:getFileSubmitUrl(), data:data, cache:false, processData:false, contentType:false, type:'POST', success:function (data, status, req) { handleResults(req); }, error:function (req, status, error) { handleResults(req); } });
我还发现这段代码也有效:
var oReq = new XMLHttpRequest(); oReq.open("POST", getFileSubmitUrl()); oReq.addEventListener("error", transferComplete); oReq.addEventListener("load", transferComplete); oReq.addEventListener("abort", transferComplete); oReq.send(data); } function transferComplete(evt) { handleResults(evt.target); }