【发布时间】:2017-10-02 03:34:56
【问题描述】:
我在 eu-west-1 区域的 AWS 中有一个名为 latheesan-public-bucket(例如)的公共 S3 存储桶。
如果我在浏览器中访问以下网址(例如):
https://latheesan-public-bucket.s3-eu-west-1.amazonaws.com/
我得到以下 XML,表明我在存储桶中有一个文件:
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>latheesan-public-bucket</Name>
<Prefix />
<Marker />
<MaxKeys>1000</MaxKeys>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>test.json</Key>
<LastModified>2017-07-11T16:39:50.000Z</LastModified>
<ETag>"056f32ee5cf49404607e368bd8d3f2af"</ETag>
<Size>17658</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
如果我随后访问https://latheesan-public-bucket.s3-eu-west-1.amazonaws.com/test.json,我可以从我的公共存储桶下载我的文件。
为了在我的 Laravel 应用程序中实现同样的功能;我首先通过 composer 添加了这个包:
联赛/flysystem-aws-s3-v3
然后在我的.env 上,我添加了以下几行:
AWS_REGION=eu-west-1
AWS_BUCKET=latheesan-public-bucket
最后,我尝试使用 laravel 文件系统访问公共 s3 存储桶文件,如下所示:
$json = Storage::disk('s3')->get('test.json');
当我这样做时;我收到以下错误:
从实例配置文件元数据中检索凭据时出错 服务器。 (cURL 错误 28:连接在 1000 毫秒后超时 (见http://curl.haxx.se/libcurl/c/libcurl-errors.html))
所以,我用一些假凭据更新了我的 .env:
AWS_KEY=123
AWS_SECRET=123
AWS_REGION=eu-west-1
AWS_BUCKET=latheesan-public-bucket
现在我收到此错误:
Illuminate \ Contracts \ Filesystem \ FileNotFoundException
test.json
所以我的问题是;首先我在这里做错了什么?如果没有实际提供有效的 S3 密钥/秘密,是否无法访问 laravel 中的公共 s3 存储桶?如果我不认识他们怎么办?我只有公共 s3 存储桶的 url。
附: latheesan-public-bucket 不存在(它是一个虚拟存储桶名称来解释我的问题,我确实有一个我正在尝试使用的真正的公共存储桶,它在浏览器中运行良好,如上所述)。
【问题讨论】:
标签: php laravel amazon-web-services laravel-5 amazon-s3