laravel - 存储在 AWS 存储桶中的文件只有在用户登录 Laravel 应用程序时才能下载。不是直接访问 URL
问题描述
如果用户登录到我的 Laravel 应用程序,我只希望用户能够下载保存在我的 AWS 存储桶中的文件。我不希望用户在没有登录系统而不是直接访问 URL 的情况下能够下载文件。有人可以帮我实现这一目标吗?我想我可能需要以某种方式将文档设置为私有,但我不确定这一点。
解决方案
我知道有两种选择:
- 返回一个临时签名的 URL,用户可以使用它直接从 S3 下载文件。
- 通过您的应用程序从 S3 流式传输或下载文件。
对于第一个选项,您可以像这样使用Storage
外观的temporaryUrl
方法来允许访问 5 分钟:
$url = Storage::disk('s3')->temporaryUrl(
'file.jpg', now()->addMinutes(5)
);
要通过您的服务器下载文件,您可以返回:
return Storage::download('file.jpg');
不要在下面引用我的话,但我认为使用 S3 临时 url 的优点是下载不必通过您的服务器进行,这可以释放您的服务器以处理其他请求。通过您的服务器下载的好处是您将能够针对每个请求进行身份验证,并且不会有用户可以共享的临时 URL。
推荐阅读
- php - 在 codeigniter 中使用 ajax 的可靠下拉列表不起作用
- android - kotlin - 解决 DataBindingUtil.setContentView() 中的错误
- angular - 我们如何在 mat-autocomplete angular 6 中选择 tab 键而不是 Enter 键的建议?
- php - PHP在类中调用外部函数
- python - 在两个表中查找具有相似某些项目的行
- c# - SignInManager.PasswordSignInAsync() 成功,但 User.Identity.IsAuthenticated 为 false
- javascript - 使用javascript计算表中匹配词的数量
- java - G1 CG:清理时间长
- c# - 如何根据条件更改 RDLC 报告中文本框的文本?
- mysql - 根据mysql中的某些条件将一条记录拆分为两条记录