我在eu-west-1
區域的AWS中有一個名爲latheesan-public-bucket
(例如)的公共S3存儲桶。如何訪問laravel中的公有AWS 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應用程序中實現相同的功能;
league/flysystem-aws-s3-v3
然後在我的.env
我已經添加了以下幾行:
AWS_REGION=eu-west-1
AWS_BUCKET=latheesan-public-bucket
最後,我再試圖用laravel文件系統訪問公共S3存儲我第一次通過作曲家加入這個包像這樣的文件:
$json = Storage::disk('s3')->get('test.json');
當我這樣做;我得到了以下錯誤:
Error retrieving credentials from the instance profile metadata server. (cURL error 28: Connection timed out after 1000 milliseconds (see 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存儲區的網址。
P.S. latheesan-public-bucket
不存在(這是一個虛擬桶名稱來解釋我的問題,我確實有一個真正的公共存儲桶,我正在嘗試使用,它在瀏覽器中工作正常,如上所述)。
我正在閱讀其他人遇到的類似問題,並認爲這可能是問題。我想我會寫一個助手外觀來使用'file_get_contents()'列出/檢索公共文件。 – Latheesan