前提・実現したいこと
Laravel6にて音楽系のウェブアプリケーションを作成しています。
現在AWSのS3に画像をアップロードし,表示する機能を実装しているのですが,画像をアップロードする際にエラーが発生してしまいます。詳細は下記に詳しく掲示しますが,エラー内容としてはリージョンについて書かれておりました。
発生している問題・エラーメッセージ
Error executing "PutObject" on "https://.png"; AWS HTTP error: Client error: PUT https://*******.png
resulted in a 400 Bad Request
response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header (truncated...) AuthorizationHeaderMalformed (client): The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'ap-northeast-1' - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'ap-northeast-1'</Message><Region>ap-northeast-1</Region><RequestId>*******</RequestId><HostId>*********</HostId></Error>
該当のソースコード
// MyScoreController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\MyScore; use App\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; public function upload(Request $request) { $this->validate($request, [ 'file' => [ 'required', 'file', 'image', 'mimes:jpeg,png', 'title' => 'required', ] ]); if ($request->file('file')->isValid([])) { $upload_info = Storage::disk('s3')->putFile('g-chord', $request->file('file'), 'public'); $path = Storage::disk('s3')->url($upload_info); $user_id = Auth::id(); $title = $request->input('title'); $new_image_data = new Image(); $new_image_data->user_id = $user_id; $new_image_data->path = $path; $new_image_data->title = $title; $new_image_data->save(); return redirect('/myscore'); }else{ return redirect('/myscore/upload'); } }
ここが画像をアップロードする動きを担っています。
// upload.blade.php @extends('layouts.app') @section('content') <div class="upload"> <form action="/myscore/upload" method="POST" enctype="multipart/form-data"> @csrf <div class="name"> <h2>タイトル</h2> <input type="text" name="title" placeholder="タイトル"/> </div> <div class="image"></div> <label for="photo">画像ファイル:</label> <input type="file" class="form-control" name="file"> <br> <input type="submit" value="アップロード" style="margin:20px;"/> </div> </form> </div> @endsection
{ "Id": "Policy******", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt********", "Action": [ "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge", "Principal": "*" }, { "Sid": "Stmt*******", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" }, { "Sid": "Stmt********", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge", "Principal": "*" }, { "Sid": "Stmt*********", "Action": [ "s3:GetObjectAcl" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" }, { "Sid": "Stmt************", "Action": [ "s3:PutObjectAcl" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" }, { "Sid": "Stmt********", "Action": [ "s3:ReplicateObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge", "Principal": "*" }, { "Sid": "Stmt*********", "Action": [ "s3:DeleteObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::hogehoge/*", "Principal": "*" } ] }
こちらはバケットポリシーになります。
試したこと
当たり前ですが,.envのAWS_DEFAULT_REGIONは変更しております。ですが変わらずエラーになっております。またS3のバケットポリシーにてPutObjectを追加しましたがそれも見当違いだったようです。
補足情報(FW/ツールのバージョンなど)
他に掲示するべき必要な情報等ありましたら遠慮なくお申し付けくださいませ。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/11 16:08
2021/09/11 16:15
2021/09/12 14:34
2021/09/12 15:35
2021/09/13 02:34