Загрузка изображений в Grails

Я новичок в grails. Я делаю веб-приложение, которое загружает изображение со стороны клиента и сохраняет его на сервере.

Мой код Gsp:

<g:uploadForm action = "saveImage">
<input type = "file" name = "image"> 
<input type = "submit" value = "Submit">
</g:uploadForm>

Мое действие saveImage в контроллере:

def saveImage = {
def file = request.getFile('image')
        if (file && !file.empty) {
            file.transferTo(new java.io.File("image.jpg"))
            flash.message = 'Image uploaded'
            redirect(action: 'uploadImage')
        }
}

В этом коде, если я загружаю некоторые другие файлы, такие как текстовые, он выдает исключение. Для этого я хочу проверить расширение файла, и я хочу использовать цикл If, который гарантирует, что загруженный файл является файлом изображения или нет. Но я не знаю, как найти расширение файла в grails.

Есть ли другой способ загрузки изображений в приложение grails - он должен принимать только файлы изображений.

кто-нибудь может помочь?

благодаря.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
7 023
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Я не знаю, что следующий ответ - правильный способ найти расширение файла. Я тоже новичок в этом. Но этот ответ работает.

Используйте метод file.getOriginalFilename (). Он возвращает строку типа "test.jpg". Затем вы разделяете имя файла с помощью метода tokenize на ".". Затем вы берете последний строковый элемент из разделенного списка. Это расширение файла. Теперь вы можете сделать оставшийся процесс.

Получение расширения файла из file.getOriginalFilename () работает хорошо. Я думаю, что это лучший способ.

if (params?.photo?.getContentType()=='image/jpeg' || 
   params?.photo?.getContentType()=='image/gif' ||
   params?.photo?.getContentType()=='image/png' || 
   params?.photo?.getContentType()=='image/bmp'
)

Я думаю ты можешь попробовать это

Ладно, уже поздно. Но лучшее решение (поскольку расширения ничего не говорят о содержании) я нашел - это использовать file.getContentType() ...

Например, для изображений jpeg возвращаемое значение будет строкой image/jpeg, которую вы можете легко проверить. То же самое для других форматов файлов (png, gif, ...).

Надеюсь это поможет.

Просто заметил, что у @Sree было такое же предложение ... было так трудно читать, что я сначала его не заметил.

fluxon 01.03.2012 14:29

Есть небольшая проблема с file.getContentType(). То, как с этим справляются Windows и другие системы, отличается.

Например, файл .csv будет text/plain в других системах, но application/vnd.ms-excel в Windows.

Вы можете использовать Files.probeContentType (путь к файлу) для определения типа файла

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