使用jQuery Ajax上传文件时出现“未找到多部分边界”异常

4

这是我的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)

原因是什么?如何克服?

2个回答

5

原因是XMLHttpRequest 1不支持文件上传,请参考此SO问题:jQuery Ajax File Upload。你在服务器端收到错误是因为你告诉服务器期望进行多部分上传,但由于没有发送任何有效负载(=数据),所以会抛出错误。

你需要使用来自XMLHttpRequest 2的FormData(注意:仅适用于IE10及以上版本,其他所有浏览器已经支持。请参见Can I Use?以获取详细的支持信息)。

似乎可以在旧版浏览器中模拟FormData,但我个人尚未尝试。

使用XMLHttpRequest 2FormData,你的代码将像这样工作:

$("#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);
        }
    }); 
});

0

对我来说,问题是如何在表单/输入文件上包装图像。我在javascript / Jquery方面很新,所以这真的很痛苦。我知道我的服务器端没问题,因为我写了一个简单的html表单,它运行良好。我正在使用javascript创建这个新页面来预览图像,但是我遇到了“未找到多部分边界”的异常。

我在StackOverflow上找到了答案here,感谢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);
    }
});

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接