我正在建立客户端/服务器上传应用程序。 客户端将向服务器发送多个大文件。
我已经发现像ChunkedFile这样的ChunkedInput类只将文件块发送到服务器。 客户端只将ChunkedWriteHandler添加到管道中,然后在文件后发送文件(这是正确的吗?)
//Client snippets
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new ChunkedWriteHandler());
}
public void send(Channel channel, List<File> files){
for (Iterator<File> iterator = files.iterator(); iterator.hasNext();) {
File file = iterator.next();
channel.write(file.length());
ChannelFuture cf = channel.writeAndFlush(new ChunkedFile(file));
cf.await();
}
但我究竟在服务器端做什么? 如何实现第一个文件的结束? ChunkedFile没有发送文件大小的块吗? 也许有人可以为服务器端发布代码片段? 提前致谢
答案 0 :(得分:0)
我自己找到了解决方案。
问题似乎是
channel.write(file.length());
我必须向频道写一个ChunkedInput。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(file.length());
dos.flush();
channel.write(new ChunkedStream(new ByteArrayInputStream(baos.toByteArray())));