5

Il pacchetto di caricamento file Apache Commons fornisce un'interfaccia generica per eseguire lo stream di parzializzazioni multipart/form-data tramite InputStream, aggiungendo Array<Byte> o tramite qualsiasi altra interfaccia di streaming generica?Analisi di multipart/form-data utilizzando Apache Commons File Upload

So che hanno una API di streaming ma l'esempio mostra solo come farlo tramite ServletFileUpload, che a mio avviso deve essere specifico per Servlet.

In caso contrario, esistono altri framework alternativi in ​​JVM che consentono di fare esattamente questo? Purtroppo, il framework che sto usando, Spray.io, non sembra fornire un modo per farlo.

+0

Che tipo di InputStream avete? O come lo hai preso? Il caricamento file di Commons Apache ha un [FileUploadBase.getItemIterator (RequestContext)] (http://commons.apache.org/proper/commons-fileupload/apidocs/org/apache/commons/fileupload/FileUploadBase.html#getItemIterator (org.apache .commons.fileupload.RequestContext)) che è possibile utilizzare – JoseM

+0

Hai visto questo esempio dalla libreria spray.io? https://github.com/spray/spray/blob/master/examples/spray-can/simple-http-server/src/main/scala/spray/examples/FileUploadHandler.scala – JoseM

+0

Riceverò l'input in blocchi di array , quindi, idealmente, vorrei inserire questi byte nell'analizzatore di flussi. Tuttavia, la funzione che hai citato accetta un RequestContext la cui sottoclasse è solo ServletRequestContext e PortletRequestContext. Non abbastanza generale per me. – lolski

risposta

3

bayou.io ha una generica MultipartParser

potrebbe essere necessario alcuni adattatori per lavorare con esso, dal momento che ha le sue Async e ByteSource interfacce.

L'esempio seguente mostra come utilizzare il parser in modo sincrono con InputStream

String msg = "" 
     //+ "preamble\r\n" 
     +"--boundary\r\n" 
     +"Head1: Value1\r\n" 
     +"Head2: Value2\r\n" 
     +"\r\n" 
     +"body.body.body.body." 

     +"\r\n--boundary\r\n" 
     +"Head1: Value1\r\n" 
     +"Head2: Value2\r\n" 
     +"\r\n" 
     +"body.body.body.body." 

     +"\r\n--boundary--" 
     + "epilogue"; 

    InputStream is = new ByteArrayInputStream(msg.getBytes("ISO-8859-1")); 
    ByteSource byteSource = new InputStream2ByteSource(is, 1024); 
    MultipartParser parser = new MultipartParser(byteSource, "boundary"); 
    while(true) 
    { 
     try 
     { 
      MultipartPart part = parser.getNextPart().sync(); // async -> sync 
      System.out.println("== part =="); 
      System.out.println(part.headers()); 
      ByteSource body = part.body(); 
      InputStream stream = new ByteSource2InputStream(body, Duration.ofSeconds(1)); 
      drain(stream); 
     } 
     catch (End end) // control exception from getNextPart() 
     { 
      System.out.println("== end of parts =="); 
      break; 
     } 
    } 
+0

scrivimi se hai domande. – ZhongYu

Problemi correlati