2017-04-26 7 views
2

Ich muss einem Benutzer erlauben, eine große dynamisch generierte CSV-Datei (~ 500K Zeilen) von einem Browser (Java/Spring MVC 4.x app) Ich möchte nicht zuerst die gesamte Datei erstellen müssen und den Browser lang-Abfrage den Server, um festzustellen, wenn es abgeschlossen ist - eher, ich möchte den Download sofort starten und den Server die Antwort streamen als die neue Zeilen/Bytes werden verfügbar.Wie streame ich eine dynamisch generierte CSV-Datei zum Download in Spring MVC

Ich habe versucht, mit ServletOutputStream/PrintWriter den Text hinzufügen, wie es verfügbar wird und dann den Puffer leeren. Der Browser scheint jedoch nicht mit dem Herunterladen zu beginnen, bis die Controller-Methode zurückkehrt. (Nachdem flushBuffer() aufgerufen wurde, wird die Datei als Download mit der Nachricht "starting" in Chrome angezeigt.

Gibt es einen besseren Weg, dies zu tun? Ich sehe StreamingResponseBody wurde im Frühjahr 4.2 eingeführt, aber ich würde lieber nicht upgraden, wenn möglich. Gibt es eine Möglichkeit, dies mit Spring < 4.2 zu tun?

Antwort

0

ServletOutputStream/PrintWriter verwenden, um den Text hinzuzufügen, wie es verfügbar wird und dann den Puffer tatsächlich zu löschen scheint ... Chrome wird "Download starten" für eine Weile zeigen und dann langsam zeigen die Größe des Downloads erhöhen als erwartet.

Verwandte Themen