Как да предавам поточно динамично генериран CSV файл към браузъра за изтегляне в Spring MVC

Трябва да позволя на потребител да изтегли голям динамично генериран CSV файл (~500K реда) от браузър (приложение Java/Spring MVC 4.x) Не искам първо да създавам целия файл и браузърът да е дълъг - анкета на сървъра, за да се определи кога е завършена -- по-скоро искам да започна изтеглянето незабавно и да накарам сървъра да предава поточно отговора, когато новите редове/байтове станат достъпни.

Опитах се да използвам ServletOutputStream/PrintWriter, за да добавя текста, когато стане наличен, и след това да изчистя буфера. Изглежда обаче, че браузърът не започва да изтегля, докато методът на контролера не се върне. (след извикването на flushBuffer() ще видите файла да се показва като изтеглен със съобщението „стартира“ в Chrome).

Има ли по-добър начин да направите това? Виждам, че StreamingResponseBody е въведен през пролетта 4.2, но предпочитам да не надграждам, ако е възможно. Има ли начин да направите това с Spring ‹4.2?


person looselycoupled    schedule 26.04.2017    source източник


Отговори (1)


използвайки ServletOutputStream/PrintWriter, за да добавите текста, когато стане достъпен и след това да изчистите буфера, всъщност изглежда работи... Chrome ще покаже „начало на изтегляне“ за известно време и след това бавно ще покаже размера на увеличението на изтеглянето, както се очаква.

person looselycoupled    schedule 27.04.2017