Стрим CSV-файл скачать сразу, не дожидаясь - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть REST API, который вызывает метод для извлечения CSV, поскольку csv может быть миллионами строк, я извлекаю 50 тыс. Строк за раз, я хочу, чтобы загрузка началась, как только я получил первый результат запроса, и впоследствии сохранилзапись в тот же файл.

Я написал следующий код, но загрузка файла по-прежнему начинается только после получения всех результатов.

@GET
    @Path("network/all/stats/csv/download")
    @Produces({"text/csv"})
    public Response downloadCSV(UIAffiliateRequest uiInstallsRequest) {StreamingOutput stream = new StreamingOutput() {
                @Override
                public void write(OutputStream os) throws IOException, WebApplicationException {
                    Writer writer = new BufferedWriter(new OutputStreamWriter(os));
                    int off=0;
                    try {
                        CSVResponseType rs;

                        do {
                            rs = installsDao.getCSVResult(uiInstallsRequest, off);
                            String lines[] = rs.getFileName().split("\\r?\\n");
                            for (String path : lines) {
                                writer.write(path.toString() + "\n");
                            }
                            writer.flush();
                            off+=50000;
                        }
                        while (rs.isEmpty());
                    }
                    catch (DaoException e) {
                        ResponseUtils.getDataAccessErrorResponse(e);
                    }
                }
            };

            return Response.ok(stream).header("Content-Disposition", "attachment;filename=resp.csv").build();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...