お世話になっております。
PHP / Laravelでわからないことがあるので、質問させていただきます。
●バージョン
PHP 7.4.13
Laravel 8.23.1
●やりたいこと
AWS・S3に保存されている画像をローカル環境のビューで表示させたい。
●現状のソースコード
[users / edit.blade.php] <form method="POST" action="{{ route('users.update', ['name' => $user->name]) }}" enctype="multipart/form-data"> @method('PATCH') @csrf #中略 <input type="file" name="profile_img" accept="image/png, image/jpeg, image/jpg"> <button type="submit" class="btn"> 更新 </button> </form>
[UserController.php] use Illuminate\Support\Facades\Storage; class UserController extends Controller { public function update(UserRequest $request, string $name) { $user = User::where('name', $name)->first(); $image = $request->file('profile_img'); $path = Storage::disk('s3')->putFile('uploads', $image, 'public'); $user->profile_img = Storage::disk('s3')->url($path); $user->fill($request->all())->save(); session()->flash('msg_success', 'アカウント情報を編集しました'); return redirect()->route('users.show', ['name' => $user->name,]); }
[UserRequest.php] public function rules() { return [ ※省略 'profile_img' => 'file|image|mimes:jpg,jpeg,png|max:2048', ]; } }
[Users / show.blade.php] <img src="{{ $user->profile_img }}" alt="プロフィール画像">
[マイグレーションファイル] public function up() { Schema::table('users', function (Blueprint $table) { $table->string('profile_img')->nullable(); }); }
[config / filesystems.php] 'default' => env('FILESYSTEM_DRIVER', 'local'), 'cloud' => env('FILESYSTEM_CLOUD', 's3'), #省略 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), ],
●詰まっている部分
このようなソースコードを記述しましたが,
ビューで画像が表示されません。
検証ツールで<img>のsrcを確認すると src="/tmp/phpb8re2U" となっており、
コンソールには GET http://127.0.0.1:10080/tmp/phpb8re2U 404 (Not Found)が表示されています。
データベースを見るとprofile_imgカラムに/tmp/phpb8re2U"と保存されています。
AWS・S3とそれに伴う、league/flysystem-aws-s3-v3 のインストール、.envの設定はできており、アップロードするとバケットのuploadsフォルダ内にしっかりと画像が保存されています。
おそらくsrcの書き方が間違っていると思うのですが、わかりません。
知見のある方いらっしゃいましたら、ご教授頂けますと幸いです。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー