S3 允許公開讀取
封鎖對 Amazon S3 儲存體的公開存取權
由於 AWS S3 預設建議停用 S3 存取控制清單 (ACL),所以新建立的儲存貯體,只能透過「儲存貯體政策」去設定讀取權限。
也就是如果你新創的「儲存貯體」如果沒有啟用 ACL (已經建好的儲存貯體也沒辦法再啟用 ACL 了), 那 laravel storePubliclyAs() 就等同於沒用
停用 ACL 的做法
-
停用「帳戶」所有「封鎖公開存取」
-
停用「儲存貯體」的所有「封鎖公開存取」
-
設定「儲存貯體政策」
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/*" } ] }
|
- 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 是否啟用
- 停用「帳戶」所有「封鎖公開存取」
- 停用「儲存貯體」的所有「封鎖公開存取」
- 不用設定「儲存貯體政策」,程式碼使用
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); });
|