Grail upload image and storage as BLOB type in mysql

1. 创建对应的domain和对应图片的属性

/*新闻源管理*/
class NewsSource {

    String name //源名称
    String description //源描述
    byte[] icon //源图标
    String url //源网站主页链接
    boolean enabled = true //源是否可用标记,如果否则不进行该源的新闻发布
    MetadataItem type //新闻源类型:第三方未授权,第三方已授权,本站发布,用户发布

    Date dateCreated //创建时间
    String createdBy //创建人
    String updatedBy //最后修改人
    Date lastUpdated //最后更新时间
    static constraints = {
        name nullable: false, blank: false
        icon nullable: true, maxSize: 1024*1024*20
        url nullable: true
        createdBy nullable: true
        updatedBy nullable: true
        description nullable: true,  maxSize: 1024*2
    }
}

2. 修改编辑form标签名

<g:uploadForm action="save" resource="" method="POST" class="form-horizontal">
    <g:hiddenField name="version" value="${this.newsSource?.version}" />
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title"><strong>添加新闻源信息</strong></h3>
        </div>

        <div class="panel-body" style="margin-top: 20px;">

            <div class="form-group">
                <label class="col-md-3 col-xs-12 control-label">新闻源类型</label>
                <div class="col-md-6 col-xs-12">
                    <div class="input-group">
                        <span class="input-group-addon"><span class="fa fa-users"></span></span>
                        <g:select class="form-control" name="newsSource.type.id" from="${system.MetadataItem.findAllByGroupAndEnabled(system.MetadataGroup.findByCodeAndEnabled('NEWS_SOURCE_TYPE',true), true)}" optionKey="id" optionValue="name"></g:select>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <label class="col-md-3 col-xs-12 control-label">名称</label>
                <div class="col-md-6 col-xs-12">
                    <div class="input-group">
                        <span class="input-group-addon"><span class="fa fa-unlock-alt"></span></span>
                        <input type="text" class="form-control" name="newsSource.name"/>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <label class="col-md-3 col-xs-12 control-label">图标</label>
                <div class="col-md-6 col-xs-12">
                    <div class="input-group">
                        <span class="input-group-addon"><span class="fa fa-unlock-alt"></span></span>
                        <input type="file" class="form-control" name="newsSource.icon"/>
                    </div>
                </div>
            </div>
            
            %{-- 省略显示其他属性 --}%

        </div>

        <div class="form-group">
            <g:hasErrors bean="${this.newsSource}">
                <label class="col-md-3 col-xs-12 control-label">提示信息:</label>
                <div class="col-md-6 col-xs-12">
                    <ul class="alert alert-danger" role="alert">
                        <g:eachError bean="${this.newsSource}" var="error">
                            <li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li>
                        </g:eachError>
                    </ul>
                </div>
            </g:hasErrors>
        </div>
    </div>
        <div class="panel-footer" style="text-align: right;">
            <button class="btn btn-default" type="reset">重置</button>
            <button class="btn btn-primary" type="submit">保存</button>
        </div>

    </div>
</g:uploadForm>

3. 修改显示页面中的Img标签的src以显示存储在数据库中的blob数据

<div class="panel-body" style="margin-top: 20px;">

    <div class="form-group">
        <label class="col-md-3 col-xs-12 control-label">名称:</label>
        <label class="col-md-6 col-xs-12 control-show">${newsSource?.name}</label>
    </div>

    <div class="form-group">
        <label class="col-md-3 col-xs-12 control-label">图标:</label>
        <label class="col-md-6 col-xs-12 control-show"><img src="data:image/jpg;base64,${new java.lang.String(Base64.getEncoder().encode(newsSource?.icon))}" style="max-width: 200px;"/></label>
    </div>

    %{-- 省略显示其他属性 --}%

    <div class="form-group">
        <label class="col-md-3 col-xs-12 control-label">最后修改时间:</label>
        <label class="col-md-6 col-xs-12 control-show"><g:formatDate format="yyyy-MM-dd HH:mm:ss" date="${newsSource?.lastUpdated}"/></label>
    </div>
</div>

4. 常见问题:

  4.1 grails the request was rejected because its size () exceeds the configured maximum (128000)

    解决办法:在grails-app/conf/application.yml文件添加配置项如下,

   

controllers:
    defaultScope: singleton
    upload:
            maxFileSize: 20000000 #20MB
            maxRequestSize: 20000000 #20MB

转载于:https://my.oschina.net/rex2012/blog/823229

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值