j'ai un domain class en grails dont je veux ajouter un attribut image(l'image de l'utilisateur)merci demerépondreondétaillescarjesuisdébutantence framework。
quel sera l type de l'attribut? 评论je peux le stocker en basededonnée(MySQL)?
英语:
我在Grails中有一个域类,我想添加一个图片属性(用户的图像)详细的答案将对像我这样的Grails初学者有所帮助。
属性的类型是什么?如何将其存储在数据库(MySQL)中?
答案 0 :(得分:1)
我已经以这种方式实现了这样的功能:
首先是域类。我在类中添加了3个属性,我可以在其中存储具有图像和图像属性的字节数组,如图像类型(gif,png,jpg)和图像原始名称。
class User {
byte[] image;
String imageName;
String imageContentType;
static constraints = {
image nullable: true, blank: true, maxSize: 1024 * 1024 * 20; //20MB
imageName nullable: true, blank: true;
imageContentType nullable: true, blank: true;
}
}
其次,您需要记住使用适当的表单类型将图片上传到服务器:
<g:uploadForm class="user-form">
Image: <g:field name="userImage" type="file" accept="image/*"/>
</g:uploadForm>
第三,控制器。 'create'动作从请求中获取图像并将其保存到数据库中,并使用'getImage'动作获取图像链接。
class UserController {
def create () {
def imageMap = [:];
def imageContentType = parameters.componentImageImageForm?.getContentType();
if (imageContentType == null || !(imageContentType =~ "image/")) {
imageMap.put("image", null);
imageMap.put("imageName", null);
imageMap.put("imageContentType", null);
} else {
imageMap.put("image", parameters.componentImageImageForm?.getBytes());
imageMap.put("imageName", parameters.componentImageImageForm?.getOriginalFilename());
imageMap.put("imageContentType", parameters.componentImageImageForm?.getContentType());
}
def newUser = new User(imageMap);
def validation = newUser.save(flush:true);
//if(validation == null) {
//validation failed
//} else {
//validation passed
//}
//you can return here some msg or something you need
}
def getImage(Long id) {
def user = User.get(id);
if (user != null) {
response.contentType = user.imageContentType == null ? "image/jpeg" : user.imageContentType;
response.contentLength = user.image == null ? 0 : user.image.size();
response.outputStream << user.image;
} else {
response.contentType = "image/jpeg";
response.contentLength = 0;
response.outputStream << null;
}
}
}
最后,在视图中呈现图像(userId当然是您想要图像的用户的id):
<img src="${createLink(action: 'getImage', controller: 'user', id: userId)}"/>