Скачать файл Grails

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

Я использовал любые примеры, которые мне удалось найти, но все они, как правило, используют текстовые файлы в качестве примеров. Моя проблема в том, что PDF-файлы и многие другие типы файлов не загружаются должным образом. Кажется, они загружаются нормально, но ни один из файлов не открывается. Сравнивая файлы, кажется, что большая часть содержимого файлов верна, но некоторые части - нет.

Вот мой отличный код:

def file = new File(params.fileDir)    
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=${file.getName()}")
response.outputStream << file.text
return

Этот код хранится внутри контроллера, который вызывается по ссылке для загрузки. Я пробовал играть с разными типами контента, но не знаю, какой из них можно использовать для любого типа - есть ли он? Все, что я пробую, не решает проблему.

Спасибо за вашу помощь.

22
0
22 222
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы считываете содержимое файла в строку с помощью «file.text». Содержимое файла преобразуется с использованием системной кодировки символов, даже если содержимое является двоичным, а не текстовым (например, файлы PDF являются двоичными), и отправляется клиенту с использованием кодировки ответа и тем самым изменяет двоичное содержимое. Вам лучше использовать другой подход, например:

def file = new File(params.fileDir)    
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "attachment;filename=${file.getName()}")

response.outputStream << file.newInputStream() // Performing a binary stream copy

Хорошее спасибо. Я использовал метод .text, но не знал, что он делает на самом деле - не смог найти по нему никакой документации: /

James Camfield 29.12.2008 12:25

Вы можете найти документацию внутри Groovy JDK (документация по динамическим расширениям Java SDK от Groovy). В данном случае вызывается метод java.io.File.getText (): groovy.codehaus.org/groovy-jdk/java/io/File.html#getText ()

Siegfried Puchbauer 29.12.2008 12:35

Кто-нибудь знает, как поставить в ответ много файлов? Есть экзамены?

Eugene Hoza 01.08.2013 17:18

Вы можете сказать мне, что такое params.fileDir? Точное значение? Я пытаюсь сделать то же самое, но у меня есть массив байтов, тип содержимого и т. д., Хранящийся в объекте, который мне нужно поместить в загруженный файл. Спасибо!

usb 19.12.2014 01:39

Другие вопросы по теме