有以下问题:
我试图在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
:-(
与其将类型设置为blob,不如尝试增加maxSize约束:
static constraints = { rawFile(maxSize: 20 * 1024 * 1024) // 20 MBs // ... }