【发布时间】:2009-04-27 16:51:55
【问题描述】:
我想在 grails 上使用 groovy 上传图像。 我的gsp页面如下(我展示的是原版的简化版)
<g:form controller="post" action="save" enctype="multipart/form-data">
My picture <input type="file" name="myPicture" />
<g:submitButton name="submit" value="Save"/>
</g:form>
我的域类如下:
class Post {
byte[] myPicture
static mapping = {
myPicture type: "blob"
}
我需要这个映射,否则 MySql 将创建一个小到适合图像的 smallblob
static constraints = {
myPicture(nullable:false)
}
}
在控制器上,我有一个名为 save 的操作,如下所示:
def save = {
def post = loadPost(params.id)
post.properties = params
if(post.save()) {
print "hallo world"
redirect(action:'list', params:params)
} else {
render(view:'edit', model:[post:post])
}
}
当我尝试将图像保存到数据库时引发异常。
2009-04-27 18:16:07,319 [20806951@qtp0-0] ERROR errors.GrailsExceptionResolver - java.lang.ClassCastException: [B cannot be cast to java.sql.Blob
org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.ClassCastException: [B 不能转换为 java.sql.Blob
任何提示这是为什么?
顺便说一句,我在教程中看到图像被处理为字符串,但它不起作用 也是。
【问题讨论】:
-
你的 loadPost() 方法是做什么的?
-
没什么特别的 private loadPost(id) { def post = new Post(); if(id) { post = Post.get(id) } 返回帖子 }
-
@Miguel Ping 提供了一段代码,该代码对于上传是正确的,但不能解决 Class Cast Exception。为了“保存”图像,必须使用 getBytes() 方法
标签: grails groovy classcastexception