我正在使用Apache POI SXSSFWorkbook生成.xlsx excel电子表格,但是我需要将该文件保存到blob中,而不是下载它。我还需要这个能够扩展,所以如果我有600,000+个记录放入文件,我需要避免内存不足错误。这是代码
SXSSFWorkbook workbook = new SXSSFWorkbook(100);
addContent();
通常在输出到文件时我会执行类似
的操作OutputStream output = response.getOutputStream();
workbook.write(output);
但在这种情况下,我不需要它去文件,只需要数据库中的blob,除非没有办法将SXSSFWorkbook保存到blob中。我可以将工作簿保存到OutputStream中并尝试将其保存到blob中,但通常需要inputStream。是否有将outputStream转换为inputStream的实用程序?
答案 0 :(得分:2)
使用@kiwiwings的建议我有以下工作:
Blob binario = Hibernate.getLobCreator(session).createBlob(new byte[0]);
SXSSFWorkbook excel = ...
excel.write(binario.setBinaryStream(0));
就是这样。
答案 1 :(得分:0)
为了将来参考,我最终把它放到一个文件中,然后从中读取。
OutputStream output = new FileOutputStream(file);
workbook.write(output);
workbook.dispose();
output.flush();
output.close();
InputStream input = new FileInputStream(file);
Blob blob = dao.saveInputStreamToBlob(input);
然后在DAO中使用hibernate session来getLobHelper并从inputStream创建blob。性能还可以,我只测试了25,000左右的记录,但还没有内存问题。