Вот пример использования FileSystemResource .
Что было изменено (см. Числа в коде с комментариями):
1) Объявите, что ответ будетбыть типа application / octet-stream
2) @ResponseBody
Аннотация, указывающая, что возвращаемое значение метода должно быть привязано к телу веб-ответа
3) Объявите, что метод возвращает FileSystemResource
body
4) Верните сущность FileSystemResource
, основанную на созданном вами zip-файле
Обратите внимание, что это все равно создаст файл насначала на стороне сервера, но вы можете использовать File.createTempFile и File.deleteOnExit .
@GetMapping("/download/rawdata", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)//1
@ResponseBody //2
public ResponseEntity<FileSystemResource> downloadRawdata(@RequestParam("date") String date){ //3
log.info("date : "+date);
List<Rawdata> rawdatas = rawdataRepoisotry.findRawdataByDate(date);
log.info("size of rawdata : "+rawdatas.size());
List<File> files = new ArrayList<File>();
int i = 1;
for(Rawdata rawdata : rawdatas){
log.info("rawdata : "+ rawdata.getRawdata());
File file = new File(i+".txt");
try (Writer writer = new BufferedWriter(new FileWriter(file))) {
String contents = rawdata.getRawdata();
writer.write(contents);
files.add(file);
} catch (IOException e) {
e.printStackTrace();
}
i++;
}
try {
File resultFile = new File(date+".zip");
zipFile(files, resultFile);
return new ResponseEntity<>(new FileSystemResource(resultFile), HttpStatus.OK); //4
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Failed while creating Zip file");
}
}