IE 11: Error while sending Multipart Form Data req

2019-04-07 13:28发布

I am trying to upload files along with some other form fields using jQuery AJAX calls.

This is a common function that calls the URL on the server:

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);
        });
}

On examining from the dev tools from browsers, these are the respective request contents:

From 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--

On server side, we are parsing the request as:

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);
}

The code works fine from Chrome and Firefox, but throws the below exception when I tried from IE11.

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

I referred to these SO questions but in vain.

Any useful pointers are appreciated. Thanks.

3条回答
Viruses.
2楼-- · 2019-04-07 13:34

Turned out a weird issue. This is how it's resolved.

  • We had checkboxes at the end of the form. The mentioned issue was occurring when we do not select any of the checkboxes. The request was not getting formed correctly and hence server threw error.
  • Added a hidden field at the end of the form (make sure this is the last form field) and assigned some value to it.

That' it. Worked like a magic!

More info here.

查看更多
Explosion°爆炸
3楼-- · 2019-04-07 13:46

I had the same problem. I was having only the id attribute and missing the name attribute in the hidden input field which gave me the below error. Issue resolved after adding the name attribute to the input hidden type field.

id="timestamp" name="timestamp"

Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly Caused by: org.apache.commons.fileupload.FileUploadException: Stream ended unexpectedly

查看更多
Juvenile、少年°
4楼-- · 2019-04-07 13:48

It happened to me, the problem was that there was location.reload once document was selected for upload. This stopped the stream to be parsed.

查看更多
登录 后发表回答