Class cast exception in Groovy
I want to upload an image using a groovy on grails.
My gsp page is as follows (I am showing a simplified version of the original)
<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>
My domain class is as follows:
class Post {
byte[] myPicture
static mapping = {
myPicture type: "blob"
}
I need this mapping otherwise MySql will create a smallblob which is to small to fit the images
static constraints = {
myPicture(nullable:false)
}
}
At the controller I have an action called save which is as follows:
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])
}
}
The exception is thrown when I try to save the image at the DB.
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 cannot be cast to java.sql.Blob
Any hint why is this?
BTW, I've seen in a tutorial that images were handled as strings but it didn't work
as well.
如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

评论(3)


Can you try using Spring's MultipartFile within your loadPost()
method?
Here's an example from the docs:
def upload = {
def f = request.getFile('myFile')
if(!f.empty) {
f.transferTo( new File('/some/local/dir/myfile.txt') )
response.sendError(200,'Done');
}
else {
flash.message = 'file cannot be empty'
render(view:'uploadForm')
}
}
I believe you can access f.bytes
directly.

I found a similar question on Nabble:
http://www.nabble.com/MySQL-and-Blobs-td16116885.html
Two possible solutions are suggested:
- Change the constraints of the blob property to a large max-size, to stop it from using "TinyBlob".
- Use the Hibernate Blob implementation instead of byte[] for the property's type declaration. This will require you stream data into the Blob, instead of direct assignment, but the post above gives code to do so.
发布评论
需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。