【发布时间】:2020-11-17 17:00:58
【问题描述】:
我正在尝试从我的 java spring 服务器发送一个 xls 文件来响应客户端。
使用默认的 Apache POI 构造函数创建 xlsx 文件,这不好。为了覆盖它,我必须使用 FileOutputStream 创建文件。
FileOutputStream outputStream = new FileOutputStream("file.xls");
但我无法通过网络发送文件。我尝试使用以下答案:https://stackoverflow.com/a/54765335/10319765 我引用:“下载文件时,您的代码需要逐块流式传输文件 - 这就是 Java 流的用途。”
return ResponseEntity.ok().contentLength(inputStreamWrapper.getByteCount())
.contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
.cacheControl(CacheControl.noCache())
.header("Content-Disposition", "attachment; filename=" + "file.xls")
.body(new InputStreamResource(inputStreamWrapper.getByteArrayInputStream()));
所以我的控制器正在发送InputStreamResource。
如何使用我的FileOutputStream 构造InputStreamResource?
P.S 这是我的 React 客户端:
axios.get('/issues/export', { responseType: 'arraybuffer' }).then(response => {
if (response && !response.error) {
const blob = new Blob([response.payload.data], {type: 'application/vnd.ms-excel'});
saveAs(blob);
}
});
来源:https://stackoverflow.com/a/46331201/10319765
编辑:
我已经设法做到了这一点,在我写入 FileOutputStream 之后,我打开了一个 FileInputStream 并返回了值。
FileOutputStream outputStream = new FileOutputStream("file.xls");
workbook.write(outputStream);
workbook.close();
final InputStream fileInputStream = new FileInputStream("file.xls");
return fileInputStream;
【问题讨论】:
标签: java reactjs apache-poi