如何使用基于netty 4.0的客户端进行PUT?

时间:2015-12-28 22:32:40

标签: http netty

我想使用netty发送PUT请求,但是从服务器获取超时。似乎身体没有被发送。这是我的代码:

// open file to PUT
RandomAccessFile file = new RandomAccessFile("myFile", "r");
long fileLength = file.length();

// create request (without content, i.e. no DefaultFullHttpRequest)
HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.PUT, path);
HttpHeaders headers = request.headers();
headers.set(HttpHeaders.Names.HOST, host);
headers.set(HttpHeaders.Names.CONTENT_LENGTH, fileLength);

// send request
ch.write(request);

// send body - is this correct?
ch.write(new DefaultFileRegion(file.getChannel(), 0, fileLength), ch.newProgressivePromise());
ch.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);

// wait
ch.closeFuture().sync();

如果这样可行Expect:当然应该使用100-continue。 感谢任何提示。

1 个答案:

答案 0 :(得分:0)

您应该使用DefaultFullHttpRequest代替DefaultHttpRequest

这样做,您可以使用DefaultFullHttpRequest.content()方法获取表示请求内容的ByteBuf。只需通过调用ch.writeAndFlush( request )发送请求,就可以将数据写入其中。