一尘不染

如何在grails中创建与Oracle兼容的文件上传?

hibernate

有以下问题:

我试图在grails中创建simpel文件上传功能。我刚刚创建了一个带有

byte[] rawFile

作为财产。Grails为我完成了其余的大部分工作。对于开发环境中的标准hsqldb来说,它运行良好。

然后,我将其部署到配置了oracle db(瘦驱动程序)的服务器上。除了文件上传外,其他所有内容都可以在oracle
db中正常工作。对于文件上传,我得到了(据我所记得)

SQLException:ORA-01461:只能将LONG值绑定以便插入到LONG中

我尝试了几种方法来修复它(包括一些到blob的列映射,并使用java.sql.blob而不是byte
[]),但没有任何实际效果,并且我朝着不再与数据库无关的方向发展。

Google并没有真正帮助我,我的grails书籍也没有帮助。

我认为将文件保存到磁盘不是一个好的解决方案。

所以这是我的问题:

如何在grails中创建与Oracle兼容的文件上传?

更新 :有一些其他信息。设法重现了Oracle XE版的问题:

Hibernate为rawFile创建一个VARBINARY(255)列。因此,我尝试上传一个4字节的文件,它可以正常工作。

然后,我将列的类型手动更改为“ blob”,并且可以处理更大的文件。

然后我加了

static mapping = {
    columns {
        rawFile type:'blob'
    }
}

到我的域类,它停止工作:

错误errors.GrailsExceptionResolver-[B无法强制转换为java.sql.Blob
java.lang.ClassCastException:[B无法强制转换为java.sql.Blob

:-(


阅读 222

收藏
2020-06-20

共1个答案

一尘不染

与其将类型设置为blob,不如尝试增加maxSize约束:

static constraints = {
    rawFile(maxSize: 20 * 1024 * 1024) // 20 MBs
    // ...
}
2020-06-20