6

Sto tentando di caricare file insieme ad altri campi modulo utilizzando le chiamate jQuery AJAX.IE 11: Errore durante l'invio di richiesta di dati modulo multiplo: flusso terminato in modo imprevisto

Questa è una funzione comune che chiama l'URL sul 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); 
     }); 
} 

Esaminando dagli strumenti di sviluppo dai browser, questi sono i rispettivi contenuti di richiesta:

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

Sul lato server, ci sono l'analisi della richiesta, come:

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

Il codice funziona bene da Chrome e Firefox, ma genera l'eccezione di seguito quando ho provato da IE11.

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

Ho fatto riferimento a queste domande SO ma invano.

Eventuali indicazioni utili sono apprezzati. Grazie.

risposta

9

Si è rivelato un problema strano. Questo è come è stato risolto.

  • Avevamo le caselle di controllo alla fine del modulo. Il problema menzionato stava accadendo quando non selezioniamo nessuna delle caselle di controllo. La richiesta non si è formata correttamente e quindi il server ha generato un errore.
  • Aggiunto un campo nascosto alla fine del modulo (assicurarsi che questo sia l'ultimo campo modulo) e assegnato un valore ad esso.

That 'it. Ha funzionato come una magia!

Ulteriori informazioni here.

+1

Life saver !!! Che strano problema però – Edd

+0

Non posso credere che abbia funzionato. – JanTheGun

+0

Mi sono imbattuto in questa app con il mio grails a cui ho accesso da IE10. Il campo nascosto lo risolse. FWIW, il mio modulo ha caselle di controllo, ma non sono le ultime nel modulo (2 campi di testo sono). – amos

0

Ho avuto lo stesso problema. Stavo avendo solo l'attributo id e mancava l'attributo name nel campo di input nascosto che mi ha dato l'errore seguente. Problema risolto dopo aver aggiunto l'attributo nome al campo del tipo di input nascosto.

id = "timestamp" name = "timestamp"

Causato da: org.apache.commons.fileupload.MultipartStream $ MalformedStreamException: Flusso terminato inaspettatamente causati da: org.apache.commons.fileupload.FileUploadException: Stream terminato in modo imprevisto

+0

Grazie, questo ha risolto il mio problema. – butYouDontLookLikeADeveloper

Problemi correlati