首页 > 解决方案 > 无法使用 Laravel 将私有文件上传到 s3 存储桶/文件夹

问题描述

我的 Laravel 项目中有以下代码:

$filename = 'bagel-corp-nda.pdf';

Storage::disk('s3')->put('agreements/'.$filename, file_get_contents($filename),'private');

当我触发此代码时,任何人都可以转到链接https://confidential-agreements.s3.ca-central-1.amazonaws.com/agreements/bagel-corp-nda.pdf并查看上传的 PDF。这个'private'论点并没有使我的上传不公开。

我究竟做错了什么?

标签: laravelamazon-s3

解决方案


根据这个论坛帖子,默认情况下,可见性实际上是私有的。

默认情况下,所有对象都是私有的:只有所有者拥有完全控制权。添加新对象时,您可以向单个 AWS 账户或预定义的 Amazon S3 组授予权限。

上面的引用来自支持该论坛主题的 Amazon 的 S3 API 文档。

所以你应该尝试在没有第三个参数的情况下简单地调用它,如下所示:

Storage::disk('s3')->put('agreements/'.$filename, file_get_contents($filename))

并确保您的 s3 磁盘配置没有'visibility' => 'public'

如果它仍然不起作用,那么您可以尝试遵循 API 文档并使用

// Untested
Storage::disk('s3')->put('agreements/'.$filename, file_get_contents($filename), ['x-amz-acl' => 'private'])

推荐阅读