Netty 4 HttpChunkedInput 在 HttpObjectEncoder 中抛出 "unexpected message type: DefaultHttpContent"

Netty 4 HttpChunkedInput throws "unexpected message type: DefaultHttpContent" in HttpObjectEncoder

我写了一个 netty 4.0.33 https 文件服务器,它应该以 chucks 的形式发送文件。 File-Server-Example 当使用 https 处理这样的响应时显示:

// Write the initial line and the header.
channelHandlerContext.write(httpResponse);
// Write the content.
ChannelFuture sendFileFuture;
sendFileFuture = channelHandlerContext.writeAndFlush(
     new HttpChunkedInput(new ChunkedFile(accessFile, 0, accessFile.length(), 8192)),     
     channelHandlerContext.newProgressivePromise()
);

我测试的文件只有 270 字节长,因此处理程序立即触发完整事件,但出现错误;

Transfer failed.java.lang.IllegalStateException: unexpected message type: DefaultHttpContent

这是由作为 HttpServerCodec 一部分的 HttpObjectEncoder class 引起的。出于某种原因,HttpChunkedInput 传递了一个似乎不允许的 DefaultHttpContent object。

我的烟斗是这样的

HttpServerCodec
HttpObjectAggregator
ChunkedWriteHandler
FileHandler

对我来说,这看起来像是一个非常默认的设置。我在这里做错了什么?

更新

我为 headers 初始化了 HttpResponse object,如下所示:

HttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);

问题是您创建了 DefaultFullHttpResponse。

请使用:

HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);