【问题标题】:Download file in Laravel from AWS S3(non public bucket)从 AWS S3(非公共存储桶)下载 Laravel 中的文件
【发布时间】:2021-10-08 17:08:09
【问题描述】:

我可以将所有文件保存在存储桶中,但下载有困难。
我的代码是:

$url = Storage::disk('s3')->temporaryUrl(
        $request->file, now()->addMinutes(10)
    );
    return Storage::disk('s3')->download($url);

存储在$request->file中的完整文件路径

示例路径:https://bucket_name.privacy_region_info/folder_inside_bucket/cTymyY2gzakfczO3j3H2TtbJX4eeRW4Uj073CZUW

我得到了休闲https://prnt.sc/1ip4g77

我不明白生成临时Url 的目的吗?如何从 S3 非公共存储桶下载文件?

顺便说一句,我正在使用 Laravel 8 和 League/flysystem-aws-s3-v3 1.0.29。

【问题讨论】:

  • 查看您的 AWS 权限,注意“任何人都可以创建一个,但要使其可用,它需要由具有权限的人创建”docs.aws.amazon.com/AmazonS3/latest/userguide/…
  • 1) AWS 用户是否分配了正确的权限才能从私有存储桶下载?用户将需要为其分配明确的权限。这可以通过 AWS 中的 IAM 策略来完成
  • @edd-smith 我认为可能是这种情况。我的许可prnt.sc/1j0m5xh。我还必须向我的管理员询问读取权限。感谢两位花时间回答

标签: laravel amazon-web-services amazon-s3


【解决方案1】:

您显示的错误消息表明您的用户没有正确的权限,或者该文件不存在。

如果您确定该文件存在,我会怀疑存在权限问题。

在 AWS IAM 中,确保用户附加了一个授予正确权限的策略。

在这种情况下,来自 cmets,我可以看到用户只有“写入”权限。您还需要明确的“读取”权限。

【讨论】:

  • 我解决了休闲问题:if(Storage::disk('s3')->exists('/'.$request->file)){ return Storage::disk('s3')->download('/'.$request->file,'name' ); } 其中$request->file 只是foldername/file_name_with_extencion 而不是完整路径。但我现在遇到了另一个问题。我只能在我的检查元素的预览中看到它,而不是下载文件。我尝试添加标题'ResponseContentDisposition' => 'attachment;',但结果相同。关于如何解决这个问题的任何想法?
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 2019-09-06
  • 2019-02-21
  • 2017-10-19
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多