Последующий вопрос из моего последнего вопроса, который с тех пор был разрешен.
Я пытаюсь загрузить файл через Spring @Controller
, возвращая FileSystemResource
. Я получаю действительный HTTP 200 Response и могу просмотреть все содержимое файла в браузере, однако я никогда не получаю приглашение загрузить файл. Здесь мой метод:
@RequestMapping(method = RequestMethod.GET, headers="Accept=*/*", value = "/download/{fileName:.+}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@ResponseBody
public FileSystemResource download(@PathVariable String fileName, HttpServletResponse response) throws IOException {
File file = new File(path + '/' + fileName);
response.setContentLength((int)fileName.length());
response.setContentType("application/force-download");
response.setHeader("Content-Disposition","attachment; filename=\"" + fileName + "\"");//fileName);
return new FileSystemResource(file);
}
В браузере:
Response Headers
Content-Disposition | attachment; filename="my_data.CSV"
Content-Length | 1712
Content-Type | text/csv
Request Headers
Accept | */*
Accept-Encoding | gzip, deflate
Accept-Language | en-US,en;q=0.5
Здесь все выглядит здесь; любая идея, почему фактический файл не возвращается? ура
Для загрузки: я использую:
response.setContentType("application/octet-stream");
Обратите внимание, что ваш результат "Content-Type | text/csv" не соответствует тому, что вы установили
Минимум, который работал для меня, - это комбинация кода в вопросе, плюс предложение типа содержимого октетного потока от @pdem. Все остальное кажется ненужным:
@GetMapping(value = "/testcsv")
public @ResponseBody String getFile(HttpServletResponse response){
String test = "test1, test2, test3";
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment; filename=\"test.csv\"");
return test;
}