这是我的 jQuery 片段
$("#uploadForm").submit(function (e) {
$.ajax({
url: 'uploadExcel',
data: $('#uploadForm').serialize(),
cache: false,
contentType: 'multipart/form-data',
processData: false,
type: 'POST',
success: function (data) {
alert(data);
}
});
上传文件时出现以下错误
org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:931)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at com.obs.controller.ExcelUploadController.doPost(ExcelUploadController.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
这是什么原因?如何克服?
最佳答案
XMLHttpRequest
1 不支持文件上传的原因,参见这个 SO 问题:jQuery Ajax File Upload .您在服务器端收到错误,因为您告诉服务器期望进行分段上传,但由于没有随它发送有效负载(= 数据),因此会引发错误。
你需要 FormData
来自 XMLHttpRequest
2(注意: 仅 IE10 及更高版本。所有其他浏览器已支持它。请参阅 Can I Use? 了解详细支持信息)。
似乎FormData
可以是emulated in older browsers ,虽然我还没有亲自尝试过。
使用 XMLHttpRequest 2
和 FormData
,您的代码将像这样工作:
$("#uploadForm").submit(function (e) {
e.preventDefault();
$.ajax({
url: 'upload.ajax.php',
data: new FormData($(this)[0]),
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function (data) {
console.log(data);
}
});
});
关于java - 使用 jQuery Ajax 上传文件时出现“未找到多部分边界”异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609459/