Upload-Fortschritt des Jersey-Clients

Ich habe einen Jersey-Client, der eine Datei hochladen muss, die groß genug ist, um einen Fortschrittsbalken zu benötigen.
Das Problem ist, dass bei einem Upload, der einige Minuten dauert, die übertragenen Bytes auf 100% gesetzt werden.sobald die anwendung gestartet ist. Dann dauert es einige Minuten, bis die Zeichenfolge "on finished" gedruckt ist.
Es ist, als ob die Bytes an einen Puffer gesendet würden und ich die Geschwindigkeit für die Übertragung in den Puffer anstelle der tatsächlichen Upload-Geschwindigkeit lesen würde. Dies macht den Fortschrittsbalken unbrauchbar.

Dies ist der sehr einfache Code:

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);

Um den Fortschrittsstatus zu erhalten, habe ich einen ContainerListener-Filter hinzugefügt, der offensichtlich ist, bevor builder.post aufgerufen wird:

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));

Antworten auf die Frage(2)

Ihre Antwort auf die Frage