2010-12-15 6 views
2

J'ai ce morceau de code (je n'ai pas écrit, tout en maintenant):apache.commons.fileupload jette MalformedStreamException

public class MyMultipartResolver extends CommonsMultipartResolver{  
    public List parseEmptyRequest(HttpServletRequest request) throws IOException, FileUploadException { 
      String contentType = request.getHeader(CONTENT_TYPE); 
      int boundaryIndex = contentType.indexOf("boundary="); 

      InputStream input = request.getInputStream(); 

      byte[] boundary = contentType.substring(boundaryIndex + 9).getBytes(); 
      MultipartStream multi = new MultipartStream(input, boundary); 
      multi.setHeaderEncoding(getHeaderEncoding()); 

      ArrayList items = new ArrayList(); 
      boolean nextPart = multi.skipPreamble(); 
      while (nextPart) { 
       Map headers = parseHeaders(multi.readHeaders()); 
       // String fieldName = getFieldName(headers); 

       String subContentType = getHeader(headers, CONTENT_TYPE); 
       if (subContentType == null) { 
        FileItem item = createItem(headers, true); 
        OutputStream os = item.getOutputStream(); 
        try { 
         multi.readBodyData(os); 
        } finally { 
         os.close(); 
        } 
        items.add(item); 
       } else { 
        multi.discardBodyData(); 
       } 

       nextPart = multi.readBoundary(); 
      } 

      return items; 
     } 
} 

J'utilise la version commons-fileupload.jar 1.2.1 et évidemment la le code utilise des méthodes dépréciées ...
Quoi qu'il en soit, tout en essayant d'utiliser ce code pour télécharger un fichier très volumineux (780 MB) Je reçois ceci:

org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly 
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:983) 
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887) 
    at java.io.InputStream.read(InputStream.java:89) 
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94) 
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64) 
    at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:593) 
    at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:619) 

qui est jeté de « multi.discardBodyData() " ligne.
Ma question: Comment puis-je éviter cette erreur et être capable de réussir la collecte des éléments de fichiers?

+0

La connexion du navigateur est probablement hors délai. Combien de temps cela prend-il avant que ça n'arrive? – skaffman

+0

Cela arrive immédiatement, je cours le serveur localement sur ma machine – Spiderman

Répondre

0

prises

(org.apache.commons.fileupload.MultipartStream.MalformedStreamException e) 
     { 

      e.printStackTrace(); 

      return ERROR; 
     } 

Intercepter l'exception et la poignée via ..either InputStream ou Return Error utiliser dans struts balise d'action

+0

Il ne répond pas à la question OP. – songyuanyao

Questions connexes