У меня есть 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();
}