загрузка изображений в 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')
        }
}

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

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

Кто-нибудь может оказать помощь?

Спасибо.

12.12.2008 14:54:40
6 ОТВЕТОВ
РЕШЕНИЕ

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

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

7
14.12.2008 02:27:59

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

3
14.12.2008 03:08:32
if(params?.photo?.getContentType()=='image/jpeg' || 
   params?.photo?.getContentType()=='image/gif' ||
   params?.photo?.getContentType()=='image/png' || 
   params?.photo?.getContentType()=='image/bmp'
)

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

2
7.07.2012 07:22:16

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

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

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

0
1.03.2012 10:26:51
Просто заметил, что у @Sree было то же самое предложение ... его было так трудно прочитать, что я сначала его не увидел.
fluxon 1.03.2012 10:29:44

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

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

1
7.07.2012 06:22:23

Вы можете использовать Files.probeContentType (filePath), чтобы определить тип файла

0
29.03.2014 00:25:17