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