Я пытаюсь создать сайт, который позволяет пользователям загружать файлы любого типа, которые им нравятся. Я отлично реализовал эту функцию, и файл хранится на сервере. Позже они могут загрузить файл для просмотра, но у меня проблемы с его работой.
Я использовал любые примеры, которые мне удалось найти, но все они, как правило, используют текстовые файлы в качестве примеров. Моя проблема в том, что PDF-файлы и многие другие типы файлов не загружаются должным образом. Кажется, они загружаются нормально, но ни один из файлов не открывается. Сравнивая файлы, кажется, что большая часть содержимого файлов верна, но некоторые части - нет.
Вот мой отличный код:
def file = new File(params.fileDir)
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=${file.getName()}")
response.outputStream << file.text
return
Этот код хранится внутри контроллера, который вызывается по ссылке для загрузки. Я пробовал играть с разными типами контента, но не знаю, какой из них можно использовать для любого типа - есть ли он? Все, что я пробую, не решает проблему.
Спасибо за вашу помощь.
Проблема в том, что вы считываете содержимое файла в строку с помощью «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
Вы можете найти документацию внутри Groovy JDK (документация по динамическим расширениям Java SDK от Groovy). В данном случае вызывается метод java.io.File.getText (): groovy.codehaus.org/groovy-jdk/java/io/File.html#getText ()
Кто-нибудь знает, как поставить в ответ много файлов? Есть экзамены?
Вы можете сказать мне, что такое params.fileDir? Точное значение? Я пытаюсь сделать то же самое, но у меня есть массив байтов, тип содержимого и т. д., Хранящийся в объекте, который мне нужно поместить в загруженный файл. Спасибо!
Хорошее спасибо. Я использовал метод .text, но не знал, что он делает на самом деле - не смог найти по нему никакой документации: /