0

将图像作为 blob 保存到 Oracle 表时,有时会截断 blob。

如果图像被截断,它总是在同一个地方被截断。

此外,这不是尺寸问题,这是第一个明显的答案。一张截断的图像是 126Kb,一张很好的是 3Mb

blob 列没有指定大小,因此根据 Oracle,它默认为 2Gb。

java代码是:

OutputStream os = null;
try {
    os = image.getImage().getBinaryOutputStream();
    os.write(uploadFile.getFileData());

} catch (Exception e) {
    af = mapping.findForward("imageProblem");
} 
4

1 回答 1

1

这是因为我忘记关闭 OutputStream。在它完成将 blob 写入表之前,它正在以一种令人惊讶的确定性方式被垃圾收集(我假设)。关闭流解决了这个问题:

OutputStream os = null;
try {
    os = image.getImage().getBinaryOutputStream();
    os.write(uploadFile.getFileData());

} catch (Exception e) {
    af = mapping.findForward("imageProblem");
} finally {
    if (os != null) {
      os.close();
    }
}
于 2013-09-13T15:48:32.323 回答