网状的.IO文件传输



正如标题所说,我想使用Netty.io将特定文件从客户端传输到服务器。我试过从客户端发送字节到服务器,把这些字节放入一个数组,然后创建一个文件,但它没有工作。这是代码:

@Override
protected void channelRead0(ChannelHandlerContext ctx, ByteBuf buf) throws IOException {
byte[] bytes = new byte[buf.readableBytes()];
buf.readBytes(bytes);
InputStream in = new ByteArrayInputStream(bytes);
BufferedImage image = ImageIO.read(in);
System.out.println(image);
try{
ImageIO.write(image, "jpg", new File("ok.jpg"));
}catch (Exception ignored){}

这从来没有起作用,因为image总是null。我几乎尝试了我能找到的所有方法,但它要么是过时的代码/解释,要么是糟糕的答案。

那么,我如何能够将文件从客户端发送到服务器呢?

您的示例中没有给出客户端,因此很难找出原因。可能是客户端没有发送任何内容(没有flush?)。还要考虑到,即使你从客户端发送了一个完整的ByteBuf,这并不意味着在接收端由于网络分裂成数据包,只会有一个ByteBuf。

也许你可以看看使用Chunked handler的测试示例:

https://github.com/netty/netty/blob/4.1/handler/src/test/java/io/netty/handler/stream/ChunkedWriteHandlerTest.java

和API:https://netty.io/4.1/api/io/netty/handler/stream/package-summary.html

尝试在你的管道两侧添加LoggingHandler,以查看发生了什么:https://github.com/netty/netty/blob/e83132fcf2f3ee560826586043ed9a87ef2dcfbf/handler/src/main/java/io/netty/handler/logging/LoggingHandler.java L42

最新更新