Я новичок в 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 - он должен принимать только файлы изображений.
кто-нибудь может помочь?
благодаря.




Я не знаю, что следующий ответ - правильный способ найти расширение файла. Я тоже новичок в этом. Но этот ответ работает.
Используйте метод 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, ...).
Надеюсь это поможет.
Есть небольшая проблема с file.getContentType(). То, как с этим справляются Windows и другие системы, отличается.
Например, файл .csv будет text/plain в других системах, но application/vnd.ms-excel в Windows.
Вы можете использовать Files.probeContentType (путь к файлу) для определения типа файла
Просто заметил, что у @Sree было такое же предложение ... было так трудно читать, что я сначала его не заметил.