首页 > 解决方案 > 存储在 AWS 存储桶中的文件只有在用户登录 Laravel 应用程序时才能下载。不是直接访问 URL

问题描述

如果用户登录到我的 Laravel 应用程序,我只希望用户能够下载保存在我的 AWS 存储桶中的文件。我不希望用户在没有登录系统而不是直接访问 URL 的情况下能够下载文件。有人可以帮我实现这一目标吗?我想我可能需要以某种方式将文档设置为私有,但我不确定这一点。

标签: laravelamazon-web-servicesamazon-s3bucket

解决方案


我知道有两种选择:

  • 返回一个临时签名的 URL,用户可以使用它直接从 S3 下载文件。
  • 通过您的应用程序从 S3 流式传输或下载文件。

对于第一个选项,您可以像这样使用Storage外观的temporaryUrl方法来允许访问 5 分钟:

$url = Storage::disk('s3')->temporaryUrl(
    'file.jpg', now()->addMinutes(5)
);

要通过您的服务器下载文件,您可以返回:

return Storage::download('file.jpg');

不要在下面引用我的话,但我认为使用 S3 临时 url 的优点是下载不必通过您的服务器进行,​​这可以释放您的服务器以处理其他请求。通过您的服务器下载的好处是您将能够针对每个请求进行身份验证,并且不会有用户可以共享的临时 URL。


推荐阅读