我要上载图像用一个时髦的上杯.我的普惠制网页是如下(我表示一个简化版本的原)

<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)      
}

}

在控制我们的行动称为保存如下:

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.常规。运行时间。InvokerInvocationException:java。郎。ClassCastException:[B不能被抛到爪哇。sql。Blob

任何暗示这是为什么呢?

顺便说一句,我见过一个教程,图像处理为串但它没有工作 为好。

有帮助吗?

解决方案

尝试这样:

  def save = {                               

    def post = loadPost(params.id)

    def f = request.getFile('myPicture')             

    post.myPicture = f.getBytes()
    post.pictureType = f.getContentType()                    


    if(post.save()) {

其他提示

我发现了一个类似的问题在Nabble:

http://www.nabble.com/MySQL-and-Blobs-td16116885.html

两个可能的解决方案建议:

  • 改变的制约blob属一个大型的最大尺寸,停止其从使用"TinyBlob".
  • 使用的休眠Blob执行情况,而不是字节[]财产的类型宣言》。这将要求您的流数据进Blob,而不是直接分配,但是该职位上给代码这样做。
scroll top