2016-06-09 28 views
1

Wir verwenden Scalatra mit Jetty 9. Wir haben einen Endpunkt, der statische Dateien dient. Aber ich habe bemerkt, dass alles, was größer als 2GB ist, abgeschnitten wird. Ich kann sehen, dass die Datei chunked gesendet wird. Curl und wget können den Download korrekt starten und sie enden ohne Fehler. Ich habe nach Problemen mit Scalatra und Jetty gesucht und habe nichts dergleichen gesehen, was ich sehe. Aber es sieht aus wie jemand ein int verwendet, wenn sie eine lange benötigtsenden große Dateien mit scalatra Server endet nach 2^31 - 1 Bytes

+0

Einige Dateisysteme können keine 2GB + Dateien verarbeiten. Ist das auch bei dir der Fall? Beschreiben Sie den Client im Detail, der Probleme hat. Führen Sie Java 64-Bit auf dem Client aus? –

+0

Wir verwenden ext4, also bin ich zuversichtlich, dass wir 2GB + Dateien verarbeiten können. Und wir laufen Java 64-Bit für den Server – jamesatha

+0

Der Server ist nicht das Problem, wie Sie sagten, Curl und Wget behandelt es gut. Konzentrieren Sie sich auf den Kunden. –

Antwort

1

Für diejenigen unter Ihnen, die sich über diese Frage über ein Suchergebnis gestolpert ...

Dieses an der Anlegestelle issue tracker behandelt wurde bei https://github.com/eclipse/jetty.project/issues/630

Die Antwort ist, dass dies ein Scatratra-Bug ist, der fälschlicherweise die Annahme macht, dass .transferTo() eine Garantie hat, alle ihm übergebenen Bytes zu senden.

Die scalatra-Implementierung muss .transferTo() in einer Schleife verwenden, die überprüft, ob die gesamte Größe gesendet wurde oder nicht.

Um den Grund zu beantworten, warum 2GB ?, das ist, weil die transferTo() Java ByteBuffer verwenden, die selbst eine 2GB Grenze hat.

+0

Ja, das endete ein Problem mit Scalatra. Wir haben eine Lösung dafür, die wir überprüfen müssen. Sie können den Fortschritt des Fehlers verfolgen: https://github.com/scalatra/scaatra/issues/575 – jamesatha