创建blob - java堆空间

时间:2018-04-24 14:59:32

标签: java grails groovy

我将multipartFile从控制器传递到服务和服务内部 试图从这个multipartFile创建Blob。问题是我使用的文件非常大(4-5 gb)而且我得到的是#java堆空间"错误(不,我无法为应用程序分配更多内存)

有没有办法流式传输或某事? 我使用java 7

服务代码:

def uploadFile(MultipartFile file){
    Sql sql = utilsService.retrieveSQLFromDataSource()
    Blob blob = dataSource.connection.createBlob()
    blob.setBytes(1, file.bytes)
    ...
}

1 个答案:

答案 0 :(得分:1)

这是相关部分 - 我通过反复写一小块来模拟大型BLOB。

重要的部分是创建temporary BLOB

def bytes = data.getBytes()
BLOB tempBlob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);
def os = tempBlob.setBinaryStream(0);
20000.times { 
 os.write(bytes,0,bytes.size())
}
os.close()
int len = tempBlob.length()
println "length $len"

stmt.setBLOB (1,tempBlob)

stmt.execute()