Итак, если вы хотите вернуть файл, вы, вероятно, захотите передать его в потоковом режиме, чтобы ограничить объем используемой памяти (или, по крайней мере, это, вероятно, было рассуждением создателей Spring Framework). В вашем случае я понимаю, что файл довольно мал и его не нужно нигде хранить. Это всего лишь одноразовая загрузка на основе загруженной формы, верно?
, так что этот подход работал на моем P C:
@PostMapping("/filegenerator")
public void createFile(HttpServletResponse response) throws IOException {
List<String> lines = Arrays.asList("line1", "line2");
InputStream is = new ByteArrayInputStream(lines.stream().collect(Collectors.joining("\n")).getBytes());
IOUtils.copy(is, response.getOutputStream());
response.setContentType("application/sql");
response.setHeader("Content-Disposition", "attachment; filename=\"myquery.sql\"");
response.flushBuffer();
}
обратите внимание на заголовок content-disposition
. В нем явно указано, что вы не хотите отображать файл в браузере, но вместо этого вы хотите, чтобы он был загружен как файл, а myquery.sql
- это имя этого файла, который будет загружен.