为了账号安全,请及时绑定邮箱和手机立即绑定

在 Spring Boot 中流式传输/下载文件而不保存在内存中

在 Spring Boot 中流式传输/下载文件而不保存在内存中

慕妹3146593 2022-06-04 17:13:23
我的应用程序使用 Google Cloud Storage 存储大文件并使用 Spring Boot 作为后端。我刚刚完成了负责下载的控制器的实现,按照我认为可能是正确的,但是我从浏览器得到的行为不是我所期望的。步骤如果我尝试下载文件,将发生以下情况:使用 ReadChannel 从谷歌云存储中读取文件(“blob”)通道写入 ByteArrayOutputStream;通道使用缓冲区写入ByteArrayOutputStream 在 InputStreamResource 中转换然后在 ResponseEntity 中传递 inputStream 资源意外的行为如果用户去下载的控制器,并要求一个特定的文件,该文件首先完全加载到服务器上,然后提供给客户端。同时,客户端看到服务器“没有响应”(因为服务器正在加载文件),这不好。当文件完全加载到服务器上时,会很快出现在“已下载”中。我想要的是避免“无响应”部分,并将文件流式传输到客户端,就像您尝试下载大文件时通常发生的那样,您会在 Chrome 中看到文件周围的“下载”轮.任何帮助理解以下代码有什么问题将不胜感激!
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超13个赞

根据您的问题,您的存储桶中的对象是私有的,您希望为有限的一群人授予对它们的访问权限。如果是这样 - 签名 URL 就是您所需要的。

您可以为存储桶中的特定对象生成签名 URL,并将您的用户重定向到生成的 URL - 因此他将自己下载文件。


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 530 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号