LaravelでS3に画像をアップロードする為のメモ
Laravelで、S3に画像をアップロードする為のメモです。
.envファイルを変更
以下の情報を追加する。
AWS_KEY=[アクセスキー] AWS_SECRET=[シークレットキー] AWS_REGION=[リージョン(東京ならap-northeast-1)] AWS_BUCKET=[バケット名]
変更した情報はconfig/filesystems.php
で利用されます。
'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'), ], ],
AWS_DEFAULT_REGION
リージョンコードを調べる。
アジアパシフィック (東京)はap-northeast-1。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
AWS_BUCKET
S3のバケット名を利用する。
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY
以下を参考に作成する。
ライブラリをインストール
composer require league/flysystem-aws-s3-v3
アップロードする
ルーティングの設定
Route::get('images', function () { return view('images'); }); Route::post('/images/upload', 'User\ImagesController@upload');
viewの設定
アップロード画面
images.blade.php
<form method="post" action="{{ action('ImagesController@store') }}" enctype="multipart/form-data"> {{ csrf_field() }} <p style="margin:20px;"> <input id="file" type="file" name="image" /> </p> <input type="submit" value="アップロード" style="margin:20px;"/> </form>
controllerの設定
<?php namespace App\Http\Controllers; use Storage; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class ImagesController extends Controller { public function upload(Request $request) { $params = $request->validate([ 'image' => 'required|file|image', ]); $image = $request->file('image'); //第一引数はファイルの保存先のパス。「my_images/」配下に保存される //第二引数は画像ファイル //第三引数は外部からのアクセスの可否。publicにすると許可される $path = Storage::disk('s3')->putFile('my_images', $image, 'public'); //アップロード先のファイルパスを取得 $url = Storage::disk('s3')->url($path); return redirect()->action('ImagesController@index'); } }
アップした画像を表示
アップした画像を表示するのは簡単です。
下記でファイルパスが取得できます。
ファイルパスはs3からの相対パスで設定します。
Storage::disk('s3')->url(ファイルパス);
メソッド
メソッド | 説明 |
---|---|
Storage::disk('s3')->exists(ファイルパス) | 対象のファイルが存在するかの確認 |
Storage::disk('s3')->url(ファイルパス); | 保存したファイルの絶対バスが取得できる |
Storage::disk('s3')->get(ファイルパス); | 画像データを取得 |
Storage::disk('s3')->put('ファイルパス',ファイルデータ,'公開設定'); | ファイルのアップロード |