【发布时间】:2012-07-20 01:14:02
【问题描述】:
我有一个 jersey 客户端,它需要上传一个足够大的文件,需要一个进度条。
问题是,对于需要几分钟的上传,我看到传输的字节数达到 100%应用程序启动后。然后打印“on finished”字符串需要几分钟时间。
就好像字节被发送到缓冲区一样,我正在读取传输到缓冲区的速度而不是实际的上传速度。这使得进度条无用。
这是非常简单的代码:
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource resource = client.resource("www.myrestserver.com/uploads");
WebResource.Builder builder = resource.type(MediaType.MULTIPART_FORM_DATA_TYPE);
FormDataMultiPart multiPart = new FormDataMultiPart();
FileDataBodyPart fdbp = new FileDataBodyPart("data.zip", new File("data.zip"));
BodyPart bp = multiPart.bodyPart(fdbp);
String response = builder.post(String.class, multiPart);
为了获得进度状态,我添加了一个 ContainerListener 过滤器,显然是在调用 builder.post 之前:
final ContainerListener containerListener = new ContainerListener() {
@Override
public void onSent(long delta, long bytes) {
System.out.println(delta + " : " + long);
}
@Override
public void onFinish() {
super.onFinish();
System.out.println("on finish");
}
};
OnStartConnectionListener connectionListenerFactory = new OnStartConnectionListener() {
@Override
public ContainerListener onStart(ClientRequest cr) {
return containerListener;
}
};
resource.addFilter(new ConnectionListenerFilter(connectionListenerFactory));
【问题讨论】: