微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 apache poi 工作簿传递给 vue.js 前端使用 ServletOutputStream?

如何解决如何将 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 举报,一经查实,本站将立刻删除。