前提
Laravelで画像を投稿できるSNSを作成しています
s3に画像を保存することは出来たのですが、s3のオブジェクトURLにアクセスすると以下のようなエラーが出てしまいます。
実現したいこと```
エラーメッセージ
This XML file does not appear to have any style information associated with it. The document tree is shown below. <Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>9XGJYD3JYABJJGQE</RequestId> <HostId>MqMLxVj+pfjhQl9Rx3UcKNZi7TUsn9Hhi75sWFpd7uu7trtHAFCMLt/bqnkNdOvV02PSQQ039ac=</HostId> </Error>
コード
- index.blade.phpのimgタグのsrc属性にs3のオブジェクトURLを挿入して表示させたい
index.blade.php
1<img src="{{ Storage::disk('s3')->url('dir/'.$review->imgpath)}}">
試したこと
S3設定の問題かと思い**ブロックパブリックアクセス (バケット設定)**の項目は全てOFFにしてみましたが同じエラーページに飛ばされます。
コントローラで保存する段階で引数にpublicを指定することで、URLによるアクセスが可能になるというのを見かけたので実践してみましたがs3に画像が保存できなくなってしまいます。
PHP
1if ($request['imgpath']) { 2 3 //現在時刻を取得 4 $now = date_format(Carbon::now(), 'YmdHis'); 5 $file = $request->file('imgpath'); 6 //オリジナルネームを取得 7 $name = $file->getClientOriginalName(); 8 9 //ファイル名を現在時刻+オリジナルネームに変更 10 $tmpFile = $now . '_' . $name; 11 $tmpPath = $tmpFile; 12 13 //アスペクト比を維持して、画像サイズを横幅1080px、縦幅720pxにして一時保存する。 14 $image = InterventionImage::make($file) 15 ->fit(1080, 720, function ($constraint) { 16 $constraint->aspectRatio(); 17 })->save(storage_path('app/public/' .$tmpPath ) ); 18 19 // s3に画像ファイルとして保存 20 $s3 = Storage::disk('s3')->putFileAs('dir',new File(storage_path('app/public/' .$tmpPath )),$tmpPath, 'public'); 21 // $result = Storage::disk('s3')->url($s3); 22 // ddd($result); 23 24 // 一時ファイルを削除 25 $delete = Storage::disk('public')->delete($tmpPath); 26 }
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/09 06:49