java - 即 11 : Error while sending Multipart Form Data request: Stream ended unexpectedly

标签 java jquery file-upload internet-explorer-11 multipartform-data

我正在尝试使用 jQuery AJAX 调用上传文件以及其他一些表单字段。

这是调用服务器端URL的常用函数:

function uploadDocument(rquestURL,formId,callback){
        $.ajax({
            type : 'POST',
            url : rquestURL,
            cache:false,
            processData:false,
            contentType:false,
            data : new FormData($("#"+formId)[0])
        }).done(function(response) {
            callback(response);
        });
}

从浏览器的开发工具中查看,这些是相应的请求内容:

来自 IE11

-----------------------------7dfad39402e6
Content-Disposition: form-data; name="subject"

Test
-----------------------------7dfad39402e6
Content-Disposition: form-data; name="message"

Test test
-----------------------------7dfad39402e6
Content-Disposition: form-data; name="announcementAttachment"; filename=""
Content-Type: application/octet-stream

<Binary File Data Not Shown>
---------------------------7dfad39402e6

Chrome

------WebKitFormBoundaryp8rj3ArKDsbYw0BZ
Content-Disposition: form-data; name="subject"

Test
------WebKitFormBoundaryp8rj3ArKDsbYw0BZ
Content-Disposition: form-data; name="message"

Test test
------WebKitFormBoundaryp8rj3ArKDsbYw0BZ
Content-Disposition: form-data; name="announcementAttachment"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryp8rj3ArKDsbYw0BZ--

在服务器端,我们将请求解析为:

import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

final FileItemFactory factory = new DiskFileItemFactory();
final ServletFileUpload fileUpload = new ServletFileUpload(factory);

if (ServletFileUpload.isMultipartContent(request)) {
        // get the request content and iterate through
        items = fileUpload.parseRequest(request);
}

该代码在 Chrome 和 Firefox 中运行良好,但在 IE11 中尝试时抛出以下异常。

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: org.apache.commons.fileupload.FileUploadException: Stream ended unexpectedly

我提到了这些 SO 问题,但没有成功。

感谢任何有用的指点。谢谢。

最佳答案

结果是一个奇怪的问题。就是这样解决的。

  • 我们在表单末尾有复选框。当我们不选择任何复选框时,就会出现上述问题。请求未正确形成,因此服务器抛出错误。
  • 在表单末尾添加一个隐藏字段(确保这是最后一个表单字段)并为其分配一些值。

就是这样。像魔术一样工作!

更多信息 here .

关于java - 即 11 : Error while sending Multipart Form Data request: Stream ended unexpectedly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903414/

相关文章:

java - Google Calendar API V3 批量列表事件

php - 无法使用 php 将图像上传和存储到数据库

javascript - 上传/下载之前/之后的客户端(javascript/jQuery)文件操作

Jquery - 如何从标签获取输入值

html - 无法在 React 中上传文件时附加到 formData 对象

java - 将 FASTA 文件读入字符串 JAVA

java - Android Hello World 异常

java - java中动态字符串的分割

javascript - 如何禁用历史记录返回时的页面重新加载?

javascript - 有限制地在正文点击上调用 javascript 程序