Versuchen Sie, blueimp
JQuery
Datei-Upload-Plugin zum Hochladen großer Dateien (größer als 1 GB) zu verwenden. Mit der maxChunkSize
-Konfiguration gefunden, können Sie den Datei-Upload in Chunks von der Client-Seite aus durchführen. Server können wir Chunk Größe & amp; Dateiname mit Content-Range
& amp; Content-Disposition
headers.
Mein Server ist Weblogic
und schreibender Seitencode in einem Servlet
.
Hier sind meine Fragen:
Überprüfen Sie das Wiki des Plugins auf GitHub - es hat einen Abschnitt über Chunked File Uploads.
Aus dem Wiki :
Das Beispiel PHP-Upload-Handler unterstützt Chunked-Uploads des Box.
Um hochgeladene Uploads zu unterstützen, verwendet der Upload-Handler die Content-Range-Header , der vom Plugin für jeden übermittelt wird Brocken.
Überprüfen Sie den oben verlinkten Beispiel-PHP-Code.
Serverseite: Wie kann man wissen, dass die Anfrage der letzte Brocken ist oder nicht?
Jeder Header Content-Range
request enthält den Bytebereich der Datei, die in dieser Anfrage enthalten ist, sowie die Gesamtanzahl der Bytes der Datei. Sie können also den Endwert des Bereichs anhand der Gesamtanzahl der Bytes überprüfen, um festzustellen, ob die Anforderung den letzten Chunk enthält oder nicht.
Sehen Sie sich das Beispiel in diesem Abschnitt auf der W3C-Website an.
Serverseite Wie werden alle empfangenen Chunks-Daten in eine einzelne Datei geschrieben?
Sie können alle Blöcke im Speicher in einem Array sammeln und sie dann in einer Datei in eine Datei schreiben - dies kann jedoch für größere Dateien ineffizient sein. Java IO-API bietet Methoden zum Schreiben in Abschnitte von Dateien durch Bereitstellung eines anfänglichen Offset. Überprüfen Sie diese Frage.
Wie kann ich feststellen, dass Chunked-Anfragen sich auf dieselbe Datei beziehen, da jeder Chunk als individuelle Anfrage gesendet wird?
Überprüfen Sie den Header Content-Range
in jeder Anfrage - wenn eine Anfrage diesen Header hat, dann ist es eine der vielen Chunk-Upload-Anfragen. Mit dem Wert des Headers können Sie herausfinden, welcher Teil / Abschnitt der Datei in dieser Anfrage enthalten ist.
Außerdem enthält der Header Content-Disposition
in der Anfrage den Dateinamen, mit dem Sie verschiedene Anfragen derselben Datei verknüpfen können.
Kann ich mit dem Arbeitscode antworten? Hier sind notwendige Client- und Server-Teile. Siehe Erklärung unten.
Kunde:
%Vor%WEB_INF / web.xml:
%Vor%Servlet "FileUploadServlet":
%Vor%Die Idee besteht darin, Chunks als separate Dateien zu schreiben und sie zu einem Zeitpunkt zu assemblieren, zu dem alle Chunk-Dateien eine gemeinsame Länge haben, die der vollen Dateilänge entspricht. Auf der Client-Seite können Sie beim Upload-Start Eigenschaften definieren (hier wird für uploadId - eindeutige ID für jede Datei). Diese uploadId ist für alle Teile einer Datei gleich. Irgendwelche Fragen? Lass es mich wissen.