首页 > 解决方案 > 如何使用reactor-netty(没有Spring)接收分段文件上传?

问题描述

我已经看到有 reactor-netty 关于如何使用多部分形式发布文件的示例(https://github.com/reactor/reactor-netty/blob/89796a1839a1439a1800424e130515357a827392/src/test/java/reactor/netty/http/客户端/HttpClientTest.java#L337 )

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

似乎netty能够使用HttpPostRequestDecoder类来做到这一点,但我看不出它适合什么......

我还看到InterfaceHttpData了一个母类,Attributes但是FileUpload我看不到在哪里可以从请求中获取这些对象...

有没有人这样做过?有什么线索吗?

非常感谢

标签: reactor-netty

解决方案


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();
  });

推荐阅读