5

Apache Commons Dosya Yükleme paketi, parçalarını InputStream aracılığıyla parçalarına ayrıştırmak için Array<Byte> ekleyerek veya başka herhangi bir genel akış arabirimi üzerinden genel bir arabirim sağlar mı?Apache Commons kullanarak çok parçalı/form verisini ayrıştırma Dosya Yükleme

Aktarım API'sine sahip olduklarını biliyorum ancak örnek yalnızca Servlet'a özgü olması gerektiğini düşündüğüm ServletFileUpload aracılığıyla nasıl yapacağınızı gösterir.

Değilse, JVM'de tam olarak bunu yapmanıza izin veren başka bir alternatif çerçeve var mı? Ne yazık ki, kullandığım çerçeve, Spray.io, bunu yapmanın bir yolunu oluşturuyor gibi görünmüyor.

+0

ile eşzamanlı olarak ayrıştırıcı kullanımı gösterir? Ya da nasıl alırsın? Apache Commons Dosya Yükleme bir [FileUploadBase.getItemIterator (RequestContext)] sahiptir (http://commons.apache.org/proper/commons-fileupload/apidocs/org/apache/commons/fileupload/FileUploadBase.html#getItemIterator (org.apache .commons.fileupload.RequestContext)) muhtemelen – JoseM

+0

kullanabilirsiniz Bu örneği spray.io kütüphanesinden gördünüz mü? https://github.com/spray/spray/blob/master/examples/spray-can/simple-http-server/src/main/scala/spray/examples/FileUploadHandler.scala – JoseM

+0

Girdileri girdi olarak alacaksınız Dizi , bu yüzden en ideal olarak bu baytları akış ayrıştırıcısına beslemek isterim. Ancak, bahsettiğiniz işlev alt sınıfı yalnızca ServletRequestContext ve PortletRequestContext olan bir RequestContext alır. Benim için yeterince genel değil. – lolski

cevap

3

bayou.io kendi Async ve ByteSource arayüzleri beri jenerik MultipartParser

Sen, onunla çalışmak için bazı adaptörleri gerekebilir vardır.

Aşağıdaki örnek nasıl InputStream ne tür var 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

Sorularınız varsa bana e-posta gönderin. – ZhongYu

İlgili konular