Apache Commons File Upload包是否提供了一个通用接口来通过multipart/form-data
流式传输InputStream
块,附加Array<Byte>
或通过任何其他通用流媒体接口?
我知道他们有一个流媒体API,但该示例仅向您展示如何通过ServletFileUpload
执行此操作,我认为这一点必须特定于Servlet
。
如果没有,JVM中是否有任何其他替代框架可以让您完成此操作?可悲的是,我使用的框架Spray.io似乎没有提供这样做的方法。
答案 0 :(得分:3)
您可能需要一些适配器才能使用它,因为它有自己的适配器 Async 和ByteSource 接口
以下示例显示如何与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;
}
}