2013-01-23 3 views
2

Привет, я пытаюсь создать приложение, позволяющее мне размещать любой файл. Для того, чтобы сделать это я exececuting следующий магии:Весенний файл скачать с помощью ResponseBody

@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET) 
    @ResponseBody 
    public FileSystemResource 
    getFile(
      @PathVariable("file_name") String fileName) { 
     System.out.println(fileName); 
     String filePath = "./files/"; 
     return new FileSystemResource(new File(filePath+fileName)); 
    } 

Но этот подход приносит три нежелательных проблем:

  1. Некоторые случайные данные неоспоримая прилагаемых к файлу

  2. The файл открывается в окне браузера, а не скачан - я попытался взломать это, используя что-то вроде

    производит = "application/octet-stream"

    , но это привело к ошибке 406.

  3. Test.txt усечен в тест, я нашел walkaround при предоставлении приложения с test.txt/как fileName, но он выглядит немного грязным.

ответ

1

Как указана на spring manual

Как с @RequestBody, Spring преобразует возвращаемый объект в тело в реакции с использованием HttpMessageConverter

Я думаю, ваша проблема весна Безразлично» t поставляется с HttpMessageConverter, чем может обрабатывать FileSystemResource.

A list of builtin HttpMessageConverter is available here. Я предлагаю вам попробовать преобразовать ваш ответ в массив байтов как-то, возможно, он будет выбирать ByteArrayHttpMessageConverter вместо этого и поможет решить проблему

0

Я использовал такой код, чтобы вернуть изображение

@RequestMapping(value = "/image/{id}", method = RequestMethod.GET) 
public String getImage(... HttpServletResponse response) { 
     response.setContentType(image/png); 
     (response.getOutputStream()).write(imageByteArray); 
} 

Я думаю, что вы должны определить правильную мимику введите и отправьте свои данные в ответ.

Смежные вопросы