やりたいこと
heorkuにデプロイした、LaravelアプリでAmazon s3を利用して画像を保存したいのですが、下記エラーが発生します。情報の不足などあるかと思いますが、解決に向け何かアドバイスをお願いいたします。
Found 1 error while validating the input provided for the PutObject operation: [Bucket] is missing and is a required parameter
試したこと
-- ✳️S3 バケットの作成(アクセス許可全てオフ)
-- ✳️IAM作成
-- ✳️AWS SDK for PHPをインストール
-- ✳️ファイル操作用パッケージ(flysystem-aws-s3-v3)のインストール
-- ✳️Heroku上の環境変数を設定(下記項目を.envファイルに記載済み)
AWS_ACCESS_KEY_ID={AWSで作成したAccess key ID} AWS_SECRET_ACCESS_KEY={AWSで作成したSecret access key} AWS_DEFAULT_REGION={選択したリージョン名} AWS_BUCKET={作成したバケット名} AWS_URL=https://s3-{選択したリージョン名}.amazonaws.com/作成したバケット名/
-- ✳️herokuのキャッシュをクリア
言語・バージョン
-- PHP 7.3.11
-- Laravel 6.20.12
各ファイル
■config/filesystem.php
<?php return [ 'default' => env('FILESYSTEM_DRIVER', 'local'), 'cloud' => env('FILESYSTEM_CLOUD', 's3'), 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], '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'), ], ], ];
■web.php(ルート)
<?php Route::get('guest', 'Auth\LoginController@guestLogin')->name('login.guest'); Route::get('/', 'EmployeesController@index'); Route::get('/employee.search', 'EmployeesController@search')->name('employee.search'); Auth::routes(); Route::group(['middleware' => 'auth'], function () { Route::resource('index', 'EmployeesController', ['only' => ['index']]); Route::resource('employee_create', 'EmployeesController'); });
■EmployeesController.php(コントローラー)
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Employee; use App\Goods; use Illuminate\Support\Facades\Storage; class EmployeesController extends Controller { public function index() { $employees = Employee::with('goods')->paginate(10); return view('index', ['employees' => $employees, ]); } public function create() { $user =\Auth::user(); return view('employee_create'); } public function store(Request $request) { $request->validate([ 'employee_image' => 'required', 'employee_id' => 'required', 'employee_name' => 'required', 'office' => 'required', 'uniform' => 'required', 'winter_clothes' => 'required', 'shoes' => 'required', ]); $employee = new Employee; $employee->employee_id = $request->input('employee_id'); $employee->employee_name = $request->input('employee_name'); $employee->office = $request->input('office'); $image = $request->file('employee_image'); $path = Storage::disk('s3')->putFile('/image', $image, 'public'); $employee->employee_image = Storage::disk('s3')->url($path); $image->save(); $employee->save(); $goods = new Goods; $goods->uniform = $request->input('uniform'); $goods->winter_clothes = $request->input('winter_clothes'); $goods->shoes = $request->input('shoes'); $goods->other = $request->input('other'); $goods->memo = $request->input('memo'); $goods->employee_id = $employee->id; $goods->save(); return redirect(route('employee_create.index'))->with('flash_message','社員情報を登録しました'); } }
■employee_create.blade.php(ビュー)
@extends('layouts.app') @section('content') <div class="container"> <div class="login-container"> <h3>新規社員登録</h3> <div class="card-body"> <form method="POST" action="{{ route('employee_create.store') }}" enctype="multipart/form-data"> @csrf <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">社員番号</label> <div class="col-md-6"> <input type="tel" name="employee_id" class="form-control" value="{{old('employee_id')}}" placeholder="社員番号を入力してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">名前</label> <div class="col-md-6"> <input type="text" name="employee_name" class="form-control" value="{{old('employee_name')}}" placeholder="名前を入力してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">所属事業所</label> <div class="col-md-6"> <select name="office" class="form-control"> <option value="">事業所を選択してください</option> <option value="1事業所">1事業所</option> <option value="2事業所">2事業所</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">画像</label> <div class="col-md-6"> <input type="file" name="employee_image" class="form-control" value="{{old('employee_image')}}" placeholder="画像を挿入してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">制服</label> <div class="col-md-6"> <select name="uniform" class="form-control"> <option value="">制服のサイズを選択してください</option> <option value="S">S</option> <option value="M">M</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">防寒着</label> <div class="col-md-6"> <select name="winter_clothes" class="form-control"> <option value="">防寒着のサイズを選択してください</option> <option value="S">S</option> <option value="M">M</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">靴</label> <div class="col-md-6"> <select name="shoes" class="form-control"> <option value="">靴のサイズを選択してください</option> <option value="1㎝">1㎝</option> <option value="2㎝">2㎝</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">その他</label> <div class="col-md-6"> <input type="text" name="other" class="form-control" value="{{old('other')}}" placeholder="その他を入力してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">メモ</label> <div class="col-md-6"> <input type="text" name="memo" class="form-control" value="{{old('memo')}}" placeholder="メモを入力してください"> </div> </div> <div class="form-group row mb-0"> <div class="col-md-8 offset-md-4"> <input type="submit" value="社員登録する" class="btn btn-primary"> <input type="reset" value="戻る" class="btn btn-secondary" onclick='window.history.back(-1);'> </div> </div> </form> </div> </div> </div> @endsection
回答1件
あなたの回答
tips
プレビュー