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);
我写了一个 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);