我将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)
...
}
答案 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()