Netty 4 HttpChunkedInput在HttpObjectEncoder中抛出“意外消息类型:DefaultHttpContent”

时间:2015-11-18 16:12:53

标签: java netty httpserver

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

HttpObjectEncoder 类引起的,它是HttpServerCodec的一部分。由于某种原因, HttpChunkedInput 传递了一个似乎不允许的 DefaultHttpContent 对象。

我的烟斗看起来像这样

HttpServerCodec
HttpObjectAggregator
ChunkedWriteHandler
FileHandler

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

更新

我为这样的标题初始化了我的HttpResponse对象:

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

1 个答案:

答案 0 :(得分:1)

问题是你创建了一个DefaultFullHttpResponse。

请使用:

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