5

Gói tải lên tệp Apache Commons có cung cấp giao diện chung để phân tích cú pháp phân đoạn multipart/form-data qua InputStream, thêm Array<Byte> hoặc thông qua giao diện trực tuyến chung khác không?Phân tích cú pháp multipart/form-data bằng cách sử dụng Apache Commons File Upload

Tôi biết họ có API truyền trực tuyến nhưng ví dụ chỉ cho bạn biết cách thực hiện điều đó qua ServletFileUpload, mà tôi cho là phải cụ thể với Servlet.

Nếu không, có bất kỳ khung công tác thay thế nào khác trong JVM cho phép bạn thực hiện chính xác điều này không? Đáng buồn thay, khuôn khổ mà tôi đang sử dụng, Spray.io, dường như không cung cấp một cách để làm điều này.

+0

Những loại InputStream làm bạn có? Hoặc làm thế nào để bạn có được nó? Tải lên tệp của Apache Commons có [FileUploadBase.getItemIterator (RequestContext)] (http://commons.apache.org/proper/commons-fileupload/apidocs/org/apache/commons/fileupload/FileUploadBase.html#getItemIterator (org.apache .commons.fileupload.RequestContext)) mà bạn có thể sử dụng – JoseM

+0

Bạn đã xem ví dụ này từ thư viện spray.io chưa? https://github.com/spray/spray/blob/master/examples/spray-can/simple-http-server/src/main/scala/spray/examples/FileUploadHandler.scala – JoseM

+0

Tôi sẽ nhận được dữ liệu đầu vào theo khối của Array , vì vậy lý tưởng nhất là tôi muốn cấp các byte này cho trình phân tích luồng. Tuy nhiên, hàm bạn đã đề cập có một lớp RequestContext mà lớp con của nó chỉ là ServletRequestContext và PortletRequestContext. Không đủ chung cho tôi. – lolski

Trả lời

3

bayou.io có chung MultipartParser

Bạn có thể cần một số adapter để làm việc với nó, vì nó có riêng AsyncByteSource giao diện của nó.

Ví dụ sau đây cho thấy làm thế nào để sử dụng các phân tích cú pháp đồng bộ với 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

gửi email cho tôi nếu bạn có câu hỏi. – ZhongYu

Các vấn đề liên quan