IE 11:发送Multipart Form Data请求时出错:Stream意外结束

我正在尝试使用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  ---------------------------7dfad39402e6 

 ------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尝试时抛出以下exception。

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

我提到了这些问题,但是徒劳无功。

  • Java – IE中的FormData抛出org.apache.commons.fileupload.MultipartStream $ MalformedStreamException:Stream意外结束
  • Grails Multipart Service Stream意外结束

任何有用的指针都表示赞赏。 谢谢。

结果出了一个奇怪的问题。 这是如何解决的。

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

那就是它。 像魔术一样工作!

更多信息在这里 。

我有同样的问题。 我只有id属性,并在隐藏的输入字段中缺少name属性,这给了我以下错误。 将name属性添加到输入隐藏类型字段后,问题已解决。

id =“timestamp”name =“timestamp”

引起:org.apache.commons.fileupload.MultipartStream $ MalformedStreamException:流意外结束引起:org.apache.commons.fileupload.FileUploadException:Stream意外结束

它发生在我身上,问题是当文档被选中上传时有location.reload。 这停止了​​要解析的流。