如何解决如何将 apache poi 工作簿传递给 vue.js 前端使用 ServletOutputStream?
我正在尝试在前端使用 apache poi 工作簿作为 vue.js 应用程序中的 excel 文件,并使用 java/groovy 后端。
前端有一个excel文件可供下载,但无法打开,因为无法读取数据。
后端代码:见下文。输出流是 javax 中的 ServletoutputStream 类型。
这里是代码的一些摘录:
前端:
submit(){
Api.put("/user-input/",this.selectedEquities).
then((response) => {
FileDownload(response.data,"fileName.xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
})
},
在后端,我收到以下错误消息:
java.lang.IllegalStateException: getoutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:586)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:209)
at com.batix.action.GroovyAction.doAction(GroovyAction.java:239)
at com.batix.tags.FrontendPage.processAction(FrontendPage.java:1697)
at com.batix.tags.FrontendPage.doAction(FrontendPage.java:1386)
at com.batix.tags.FrontendFilter.service(FrontendFilter.java:923)
at com.batix.tags.FrontendFilter.doFilter(FrontendFilter.java:170
我的脚本如下所示:
def put = {
(...)
FileInputStream fileInputStream2 = new FileInputStream(xlsxFile)
byte[] bArray = new byte[(int) xlsxFile.length()]
fileInputStream2.read(bArray)
InputStream inputStream = new ByteArrayInputStream((byte[]) bArray,bArray.size())
action.originalResponse.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
action.originalResponse.setHeader("Content-disposition","attachment; filename=\"$fileName\"")
action.originalResponse.setHeader("Content-Length",String.valueOf(bArray.length))
OutputStream outputStream = action.originalResponse.outputStream
outputStream.write(inputStream.bytes)
outputStream.flush()
outputStream.close()
return null
}
上传的 excel 文件的大小为 1.5MB,下载的为 2.2MB,尽管出于测试目的,我还没有更改它。
我怎样才能做到这一点?提前致谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。