我写了一个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);
答案 0 :(得分:1)
问题是你创建了一个DefaultFullHttpResponse。
请使用:
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);