我正在尝试将文件发送到响应并支持编码。代码大部分是从 Netty github 中的示例之一复制而来的。
ChannelFuture flushFuture;
if (context.pipeline().get(SslHandler.class) == null) {
// SSL not enabled - can use zero-copy file transfer.
context.write(new DefaultFileRegion(raf.getChannel(), 0, getLength()), context.newProgressivePromise());
flushFuture = context.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
} else {
// SSL enabled - cannot use zero-copy file transfer.
try {
// HttpChunkedInput will write the end marker (LastHttpContent) for us.
flushFuture = context.writeAndFlush(new HttpChunkedInput(new ChunkedFile(raf, 0, getLength(), 8192)),
context.newProgressivePromise());
} catch (IOException e) {
throw new CustomizableResponseTypeException("Could not read file", e);
}
}
当服务器使用 SSL 时,一切正常。当不使用 SSL 时,正在完成零拷贝文件传输,并且编码不会产生正确的输出。
我已经准备好这篇博文,似乎表明我正在尝试做的事情可以工作,但是我不明白示例代码的哪一部分可能会导致它工作。任何提示或帮助将不胜感激。
谢谢!