0

我正在尝试将文件发送到响应并支持编码。代码大部分是从 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 时,正在完成零拷贝文件传输,并且编码不会产生正确的输出。

我已经准备好这篇博文,似乎表明我正在尝试做的事情可以工作,但是我不明白示例代码的哪一部分可能会导致它工作。任何提示或帮助将不胜感激。

谢谢!

4

1 回答 1

0

看来这是不可能的。解决方案是仅对小文件或不可压缩文件使用零拷贝。

于 2018-03-08T16:55:06.820 回答