如何使用Reactor-Netty(没有Spring)接收分段文件上传?

时间:2019-04-30 09:23:53

标签: reactor-netty

我已经看到了关于反应堆网络的示例,内容涉及如何使用多部分形式(https://github.com/reactor/reactor-netty/blob/89796a1839a1439a1800424e130515357a827392/src/test/java/reactor/netty/http/client/HttpClientTest.java#L337)发布文件

但是我找不到有关如何使用可解析多部分信息的react-netty编写服务器的任何信息。

netty似乎可以使用HttpPostRequestDecoder类来做到这一点,但我看不到适合的地方...

我还看到InterfaceHttpDataAttributesFileUpload的父类,但是我看不到在哪里可以从请求中获取这些对象...

有人做过吗?有任何线索吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

request.receive()
  .aggregate()
  .flatMap(byteBuf -> {
    FullHttpRequest dhr = new DefaultFullHttpRequest(request.version(), request.method(), request.uri(), byteBuf, request.requestHeaders(), EmptyHttpHeaders.INSTANCE);
    HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(new DefaultHttpDataFactory(false), dhr, CharsetUtil.UTF_8);
    // loop data
    for (InterfaceHttpData data : postDecoder.getBodyHttpDatas()) {
        // attribute
        if (data.getHttpDataType() == InterfaceHttpData.HttpDataType.Attribute) {
            // (MemoryAttribute) data
        }
        // upload
        else if (data.getHttpDataType() == InterfaceHttpData.HttpDataType.FileUpload) {
            // (MemoryFileUpload) data
        }
    }
    postDecoder.destroy();
    dhr.release();
  });