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

标签 java jquery jsp servlets file-upload

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

关于java - 使用 jQuery Ajax 上传文件时出现“未找到多部分边界”异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609459/

相关文章:

javascript - 如何从父窗口关闭模式对话框?

javascript - 复选框设置为单选按钮第二次单击故障

java - 试图从 eclipse 启动 tomcat,但找不到 index.jsp

java - 使用 c :out tag 访问 session 中 1 个 java bean 的属性

spring - Spring/JSP 中导出到 Excel JQGrid 数据

java - Admob 原生广告与 Realm 数据库

java - 为什么我不能将整数转换为字符串?

java - Android SDK中的Find_java.exe找不到Java

java - 如何使用准备好的语句从数据库中选择实体

javascript - 根据文本更改下拉列表中选项的顺序