上傳圖片到 AWS S3,並允許公開讀取

S3 允許公開讀取

封鎖對 Amazon S3 儲存體的公開存取權

由於 AWS S3 預設建議停用 S3 存取控制清單 (ACL),所以新建立的儲存貯體,只能透過「儲存貯體政策」去設定讀取權限。

也就是如果你新創的「儲存貯體」如果沒有啟用 ACL (已經建好的儲存貯體也沒辦法再啟用 ACL 了), 那 laravel storePubliclyAs() 就等同於沒用

停用 ACL 的做法

  1. 停用「帳戶」所有「封鎖公開存取」

  2. 停用「儲存貯體」的所有「封鎖公開存取」

  3. 設定「儲存貯體政策」

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"Version": "2012-10-17",
"Id": "Policy1680494149129",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sojtest1/*"
}
]
}
  1. laravel 程式碼
1
2
3
4
5
6
Route::post('upload', function (\Illuminate\Http\Request $request) {
$image = $request->file('image');
$extensionName = $image->getClientOriginalExtension();
$fileName = now()->timestamp . ".$extensionName";
return $image->storeAs('soj/test', $fileName);
});

啟用 ACL 的做法

請先確認 ACL 是否啟用

  1. 停用「帳戶」所有「封鎖公開存取」
  2. 停用「儲存貯體」的所有「封鎖公開存取」
  3. 不用設定「儲存貯體政策」,程式碼使用 storePubliclyAs() 就可以
1
2
3
4
5
6
Route::post('upload', function (\Illuminate\Http\Request $request) {
$image = $request->file('image');
$extensionName = $image->getClientOriginalExtension();
$fileName = now()->timestamp . ".$extensionName";
return $image->storePubliclyAs('soj/test', $fileName);
});

上傳圖片到 AWS S3,並允許公開讀取
https://soj0825.github.io/20230426/7457c84.html
作者
SoJ
發布於
2023年4月26日
許可協議