当前位置: 首页 > 知识库问答 >
问题:

使用Java apache poi和React通过API发送xls

丌官晔
2023-03-14

我正试图从JavaSpring服务器向react客户端发送一个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

我怎样才能构建InputStreamResources使用我的FileOutputStream

这是我的客户:

 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;

共有1个答案

洪楷
2023-03-14

问题解决了。最终,为了解决损坏的xls文件,我所做的是使用字节数组。控制器看起来完全相同,但现在返回类型为ResponseEntity

客户端代码也发生了一些变化,因为现在类型不再是响应类型:'arrayBuffer',而是'blob'

 axios.get('/issues/export', { responseType: 'blob' }).then(response => {
    if (response && !response.error) {
        const blob = new Blob([response.payload.data]);
        saveAs(blob);
    }
});

仅此而已。

 类似资料:
  • 问题内容: 我已经在项目中实现了推送通知,到目前为止一切正常。我尝试过通过Pusher发送通知,但效果很好。但是我必须通过PHP发送它们,但尚无法使用。我发现了许多有关如何实现此目标的旧解释,但似乎没有一个对我有用。 这就是我要使用的方法: 问题答案: 尝试使用此php脚本,确保.pem证书在运行时以与该php脚本相同的路径退出,并获得正确的设备令牌

  • 到目前为止,我还无法将扩展数据附加到新消息中。我尝试了如下格式设置请求正文: 就像这样: 两种格式都返回一个400代码,并带有响应体: 和“sendmail”endpoint。

  • 我正在尝试使用Google PHP API客户端https://github.com/googleapis/google-api-php-client/ 通过Google HTTPv1 API发送FCM推送通知。 以下是实际答复: 我一直得到的反应基本上是禁止的。(我也可以在谷歌开发者控制台中看到) Firebase Cloud Messaging API与Google Cloud Messagi

  • 我正在尝试使用Postman通过云消息服务发送一次推送通知。 这是一个用于相同目的的工作命令,我将其用作参考。 到目前为止我所做的。。 1-适当设置标题 2-在Body,我使用 执行时,我返回

  • 我想用Java从我的公司Outlook帐户发送邮件。但它说邮箱无法访问。我试过各种解决方案,比如更改主机名,但还是不行。错误保持不变。请对此提出任何解决方案。下面是我面临的错误片段。注意:我使用javax mail来实现这个目的。

  • 如何通过Azure从我的UWP-App向不同设备上的应用程序的其他实例发送推送通知? 以下是注册设备以接收推送的说明。(这是可行的)第二部分是关于如何在控制台应用程序上发送推送(这也是可行的)https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-star