0
我正在尝试创建一个进度条,该进度条显示来自球衣2.22客户端的文件上传进度。我试图按照此answer并使用WriteInterceptor
将OutputStream
换成CountingOutputStream
。使用WriterInterceptor跟踪文件上传进度
现在的问题是,只要文件上传开始,全字节数就会在一秒内打印到控制台。但是,直到上传结束,很长一段时间都没有发生。
我很确定我只是用这种解决方案(而不是真正发送给主机的字节)跟踪写入客户端缓冲区的字节。
所以我的问题是:我在这里误解了什么吗?或者,是不是可以跟踪从客户端发送到主机的字节?
public class UploadMonitorInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
final OutputStream os = context.getOutputStream();
context.setOutputStream(new MyCountingOutputStream(os));
context.proceed();
}
}
的MyCountingOutputStream类:
public class MyCountingOutputStream extends CountingOutputStream {
public MyCountingOutputStream(OutputStream out) {
super(out);
}
@Override
public void write(byte[] b,int st,int end) throws IOException {
super.write(b,st,end);
System.out.println("ByteCount:"+end);
}
}
写入拦截器是用于出站的。 ReaderInterceptor用于入站。 –
@peeskillet是真的。但我想从客户端上传文件到主机,并跟踪客户端的上传进度。所以WriterInterceptor应该是正确的..或不? – IIIIIIIIIIIIIIIIIIIIII
哦。我不知道,我从来没有实现过这样的事情。将是我不得不做的一些深入的思考:-) –