使用Apache Commons File Upload解析multipart / form-data

时间:2015-05-22 02:47:49

标签: java scala jvm multipartform-data apache-commons-fileupload

Apache Commons File Upload包是否提供了一个通用接口来通过multipart/form-data流式传输InputStream块,附加Array<Byte>或通过任何其他通用流媒体接口?

我知道他们有一个流媒体API,但该示例仅向您展示如何通过ServletFileUpload执行此操作,我认为这一点必须特定于Servlet

如果没有,JVM中是否有任何其他替代框架可以让您完成此操作?可悲的是,我使用的框架Spray.io似乎没有提供这样做的方法。

1 个答案:

答案 0 :(得分:3)

bayou.io具有通用MultipartParser

您可能需要一些适配器才能使用它,因为它有自己的适配器 AsyncByteSource 接口

以下示例显示如何与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;
        }
    }