我有以下课程:
<g:if test="${exibitionInstance?.flier}">
Inserted
</g:if><g:else>
<g:form action="uploadFlier" id="${exibitionInstance.ident()}" enctype="multipart/form-data">
Insert Flier (PDF):
<input type="file" id="flier" name="flier" />
<g:actionSubmit class="create" action="uploadFlier" value="Carica" />
</g:form>
</g:else>
管理员可以使用以下表单上传传单(PDF文件):
def uploadFlier(){
Exibition exibitionInstance = Exibition.get(params.id)
def file = request.getFile('flier')
if(file.empty) {
flash.message = "File cannot be empty"
} else {
exibitionInstance.flier = file.getBytes()
if(exibitionInstance.save()){
println 'SAVED!'
}
if(exibitionInstance.flier==null){
flash.message = "Flier not uploaded"
}else{
flash.message = "Flier uploaded"
}
}
redirect (action:'index')
}
处理上传的控制器代码如下:
Func<T>
控制器打印“SAVED”并给我一条flash消息“Flier uploaded”,我可以打印flier longblob属性的内容。
但是当控制器结束时,我在数据库的flier列中有一个NULL:
更新:
我明白了。我可以从mySql工作台插入pdf手动设置列。然后我可以从grails下载pdf。所以bug必须在控制器中。控制器方法uploadFlier()不是@Transactional(和只读)。更改后我收到错误:com.mysql.jdbc.PacketTooBigException:查询包太大了。
修复后的工作。