進行状況バーを必要とするのに十分な大きさのファイルをアップロードする必要があるジャージー クライアントがあります。
問題は、数分かかるアップロードの場合、アプリケーションが開始されるとすぐに転送されたバイト数が 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);
進行状況を取得するために、builder.post を呼び出す前に ContainerListener フィルターを追加しました。
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));