2013-07-23 2 views
1

У меня есть поле для изображения, из которого я хочу сохранить изображение в базе данных. Но он показывает исключение кастинга. Может кто-нибудь, пожалуйста, помогите мне в этом, пожалуйста? Я использую grails 2.1.0. Вот мой код ниже:сохранить изображение в grails

мой взгляд страница >>>

<g:uploadForm action="upload"> 

Photo: <input name="photo" type="file" /> 
<g:submitButton name="upload" value="Upload"/> 

мой контроллер действия >>>

def upload={ 
    def user = User.findById(1) 
    user.avatar = params.photo 
    user.save() 
} 

мой класс домена >>>

class User { 

    String username 
    byte[] avatar 
    String avatarType 

    static constraints = { 
     avatar(nullable:true, maxSize: 1024 * 1024 * 2 /* 2MB */) 
     avatarType(nullable:true) 
    } 

} 
+0

Что ошибка вы получаете? stacktrace будет приятным. –

+0

@ErikPragt Я получаю эту ошибку >> «Невозможно передать объект» [email protected]09e6c86 'с классом' org.springframework.web.multipart.commons.CommonsMultipartFile 'в класс' byte '" –

ответ

4

Потому что люди могут загрузить более одного файла с одним входом, я делаю это, чтобы убедиться, что я получаю только один файл.

CommonsMultipartFile file = params.list("photo")?.getAt(0) 

Тогда вы можете легко сделать:

user.avatar = file?.bytes 
+0

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

+0

Я не знаю, как проверить, является ли это файлом изображения, кроме как смотреть расширение. 'FileNameUtils.getExtension (файл? .originalFileName)' –

2

Попробуйте это в контроллере действия,

def upPic1 = request.getFile('photo') 
user.avatar=upPic1.getBytes() 

Исключение пришли из литья CommonsMultipartFile в Byte.So преобразовать в байты затем сохранить его.

+0

если я использую это, то он показывает >> «не может разрешить символ getFile» –

+0

Я ничего не импортировал. Просто попробуйте это для импорта. import org.springframework.web.multipart.commons.CommonsMultipartFile – Visme

+0

@Sumon Тем не менее эта ошибка существует? – Visme

0

Попробуйте этот код:

if(request instanceof MultipartHttpServletRequest) { 
    MultipartHttpServletRequest mpr = MultipartHttpServletRequest)request; 
    CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myfile"); 
    if(f && !f.empty){ 
     user.avatar = f.bytes 
    } 
} 
Смежные вопросы