Как получить многочастную загрузку файла с использованием реактора-нетты (без Spring)? - PullRequest
0 голосов
/ 30 апреля 2019

Я видел, что есть примеры с реактором-нетти о том, как публиковать файлы, используя многочастную форму (https://github.com/reactor/reactor-netty/blob/89796a1839a1439a1800424e130515357a827392/src/test/java/reactor/netty/http/client/HttpClientTest.java#L337)

Но я не смог найти никакой информации о том, как написать сервер, использующий реактор-нетто, который может анализировать многокомпонентную информацию.

Кажется, что netty может сделать это, используя класс HttpPostRequestDecoder, но я не могу понять, где он подходит ...

Я также видел, InterfaceHttpData - это материнский класс Attributes и FileUpload, но я не вижу, где я могу получить эти объекты из запроса ...

Кто-нибудь когда-нибудь делал это? Любые подсказки?

Большое спасибо

1 Ответ

0 голосов
/ 03 июля 2019
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();
  });
...