这是我的jQuery Snippet
$("#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)
是什么原因?如何克服它?
答案 0 :(得分:5)
XMLHttpRequest
1不支持文件上传的原因,请参阅此问题:jQuery Ajax File Upload。您在服务器端收到错误,因为您告诉服务器期望多部分上传,但由于没有发送有效负载(=数据),因此会引发错误。
您需要来自XMLHttpRequest
2的FormData
(小心:仅限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);
}
});
});
答案 1 :(得分:0)
对我来说,问题是将图像包装在表单/输入文件上。我是javascript / Jquery的新手,所以这真的很痛苦。我知道我的服务器端没问题因为我写了一个简单的html表单并且效果很好。我用javascript做这个新页面来预览图像,我得到了 '没有找到多部分边界'例外。
由于here,我在StackOverflow中找到了此chandoo的答案。
试试这个: 如果表单的id是“upload_form”。
var formData = new FormData($('#upload_form')[0]);
formData.append('tax_file', $('input[type=file]')[0].files[0]);
$.ajax({
url: 'uploadExcel',
data: formData,
cache: false,
contentType: false, //using 'multipart/form-data' didn't work for me
processData: false, //this is also important when you are dealing with files.
type: 'POST',
success: function (data) {
alert(data);
}
});
好看!