Принудительная загрузка CSV из Spring Controller

1

Последующий вопрос из моего последнего вопроса, который с тех пор был разрешен.

Я пытаюсь загрузить файл через 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

Здесь все выглядит здесь; любая идея, почему фактический файл не возвращается? ура

  • 0
    любые обновления ? даже я сталкиваюсь с этой же проблемой. кажется, все правильно.
Теги:
spring

2 ответа

2

Для загрузки: я использую:

response.setContentType("application/octet-stream");

Обратите внимание, что ваш результат "Content-Type | text/csv" не соответствует тому, что вы установили

  • 0
    Я использовал это, но мой тип контента остается прежним. Я отлажу и посмотрю, когда будет установлен тип, потому что я нигде явно не определяю text / csv
0

Минимум, который работал для меня, - это комбинация кода в вопросе, плюс предложение типа содержимого октетного потока от @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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню