загрузка изображений в Grails - PullRequest
       19

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

3 голосов
/ 12 декабря 2008

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

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

спасибо.

Ответы [ 6 ]

7 голосов
/ 14 декабря 2008

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

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

3 голосов
/ 14 декабря 2008

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

2 голосов
/ 13 декабря 2010
if(params?.photo?.getContentType()=='image/jpeg' || 
   params?.photo?.getContentType()=='image/gif' ||
   params?.photo?.getContentType()=='image/png' || 
   params?.photo?.getContentType()=='image/bmp'
)

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

1 голос
/ 06 июля 2012

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

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

0 голосов
/ 29 марта 2014

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

0 голосов
/ 01 марта 2012

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

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

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

...