将图像属性添加到Grails中的域类

时间:2014-02-07 13:21:26

标签: mysql grails

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)中?

1 个答案:

答案 0 :(得分:1)

我已经以这种方式实现了这样的功能:

  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;
        }
    }
    
  2. 其次,您需要记住使用适当的表单类型将图片上传到服务器:

    <g:uploadForm class="user-form">
        Image: <g:field name="userImage" type="file" accept="image/*"/>
    </g:uploadForm>
    
  3. 第三,控制器。 '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;
            }
        }
    }
    
  4. 最后,在视图中呈现图像(userId当然是您想要图像的用户的id):

    <img src="${createLink(action: 'getImage', controller: 'user', id: userId)}"/>