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。 这停止了要解析的流。
- 使用Java中的Rest API进行文件上载
- 在struts 2中上传video
- 文件上传“multipart / form”exceptionorg.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException
- Spring文件上传 – 获得预期的MultipartHttpServletRequest:是否配置了MultipartResolver? 错误
- 将照片上传到OpenShift。 Spring MVC
- Spring File Upload内部服务器错误
- 尝试将文件上传到JAX-RS(泽西岛)服务器
- Struts2 Fileupload在动作类中给出null文件
- Spring文件上传未绑定到模型属性对象