2012-06-28 3 views
2

В принципе, мне нужно предоставить службу REST, которая получит параметр String, использовать этот параметр для извлечения файла из другой системы и затем вернуть полученный файл обратно в качестве ответа.Каков правильный способ вернуть файл в качестве ответа?

Эффект должен быть таким же, как если пользователь нажимает на PDF или любую другую ссылку на двоичный файл, а браузер запрашивает его для сохранения/загрузки этого файла.

Пару моментов:

  • можно ли поток файла (для отправки байта, как я получаю их от исходной системы). Другими словами, как обрабатывать очень большие файлы?
  • также относится к потоковой передаче, при использовании регулярного запроса HttpServletResponse мне нужно подождать, пока большой файл не будет полностью прочитан до return response.build()?

Как обойти это, используя Apache Wink?

PS Извините, это может быть тривиальным для гуру-гуру, но я только начинаю обматывать мою голову вокруг developer guide.

ответ

3

Вы можете просто вернуть java.io.File из вашего метода. Вы можете обернуть его Response, если хотите. Wink будет обрабатывать потоки. Потоковая передача не начинается, когда вы звоните в response.build(), но скорее, когда ваш метод заканчивается.

Если вы хотите получить правильное диалоговое окно загрузки, вы должны вернуть правильный заголовок Content-Disposition. См. How to set response header in JAX-RS so that user sees download popup for Excel?