Загрузка файла Grails - как распознать тип файла и / или содержимого? - PullRequest
9 голосов
/ 16 февраля 2011

Я новичок в Grails, поэтому, пожалуйста, будьте терпеливы со мной.В настоящее время у меня трудные времена, манипулирующие загрузкой файлов.Насколько я понимаю, используя request.getFile(), я могу легко получить поток байтов.Но прежде чем сделать это, я хочу проверить следующее:

  • имя файла загружаемого файла
  • размер файла загружаемого файла
  • content /тип файла загружаемого файла

Как это можно сделать?Возможно ли это даже до того, как файл будет загружен на сервер?Я хотел бы заблокировать загрузку больших файлов.

Ответы [ 3 ]

19 голосов
/ 16 февраля 2011

Вся информация содержится в объекте CommonsMultipartFile, в который можно преобразовать параметр запроса.

Вы можете использовать это так (в вашем контроллере)

def uploaded = {
    def CommonsMultipartFile uploadedFile = params.fileInputName
    def contentType = uploadedFile.contentType 
    def fileName = uploadedFile.originalFilename
    def size = uploadedFile.size
}

Что касается блокировки загрузки больших файлов, это можно сделать, добавив в свою форму следующее:

<INPUT name="fileInputName" type="file" maxlength="100000">

но не все браузеры будут поддерживать его. Другим ограничением является ограничение на загрузку контейнера (см. Конфигурацию Tomcat или другой используемый контейнер).

Кроме этого, вы должны проверить размер и отклонить его в контроллере.

0 голосов
/ 21 ноября 2018

Со стороны сервера можно использовать конфигурацию на application.yml для ограничения размера файла приложения.

Просто вставьте этот код в application.yml:

grails:
  controllers:
    upload:
      maxFileSize: 3145728 # 3 * 1024 * 1024 = 3 MB The maximum file size
      maxRequestSize: 3145728 # The maximum request size

См:

Руководство по Grails - загрузить файл

Максимальный размер файла для загрузки в Grails3

0 голосов
/ 04 июля 2014

Или вы можете получить загруженные свойства файла напрямую, без использования CommonsMultipartFile.

def ufile = request.getFile ("fileInputName")
Println (ufile.contentType)
Println (ufile.originalFilename)
Println (ufile.size)

...