RxNetty 下载大文件

RxNetty download large file

我正在尝试创建使用 RxNetty

下载大文件的控制器

我写了一些愚蠢的东西

@RequestMapping(method = RequestMethod.GET, path = "largeFile")
public DeferredResult<ResponseEntity<byte[]>> largeFile() throws IOException {
    Observable<ResponseEntity<byte[]>> observable = RxNetty.createHttpGet(URL)
                                            .flatMap(AbstractHttpContentHolder::getContent)
                                            .map(data -> {
                                                byte[] bytes = new byte[data.readableBytes()];
                                                data.readBytes(bytes);
                                                return new ResponseEntity<>(bytes, HttpStatus.OK);
                                            });
    DeferredResult<ResponseEntity<byte[]>> deferredResult = new DeferredResult<>();
    observable.subscribe(deferredResult::setResult, deferredResult::setErrorResult);
    return deferredResult;
}

然而我有以下错误:

Caused by: io.netty.handler.codec.TooLongFrameException: HTTP content length exceeded 1048576 bytes.

RxNetty 0 中的默认客户端。4.x 聚合对最大内容长度有限制的 HTTP 负载。您看到的异常是因为该限制。您可以使用 PipelineConfigurator 更改默认客户端,如本例所示:

https://github.com/ReactiveX/RxNetty/blob/0.4.x/rxnetty-examples/src/main/java/io/reactivex/netty/examples/http/chunk/HttpChunkClient.java#L49

之后有效负载将被分块到多个缓冲区中。

或者,如果您知道最大大小,则可以在配置器中使用适当的负载聚合器。