コントローラでのアップロードファイル操作|Laravel
POSTでアップロードされたファイルをコントローラで保存する方法です。
アップロードの確認
下記のようにname
属性がaddimage
の時、コントローラでアップロードファイルを確認する方法です。
{{ Form::file('addimage', ['id' => 'add-image']) }}
ファイルが存在しているかを判定する
下記のいずれかで判定可能です。
isset($request->addimage);
$request->hasFile('addimage');
正しくアップロードできているかを判定する
isValid()
メソッドで判定します。
$request->addimage->isValid();
拡張子の取得
ファイルの拡張子はextension()
メソッドで取得できます。
$extension = $request->addimage->extension();
UploadedFile クラス
正しくアップロードできているファイルを変数に代入する場合は、下記のいずれかで記述できます。代入されるのはUploadedFile
クラスのインスタンスです。
$addImage = $request->file('addimage');
$addImage = $request->addimage;
ファイルの保存
ファイルの保存はstore()
メソッドを使用します。
store()
メソッドはアップロードファイルを\{Laravelプロジェクト}\storage\app
へ保存します。
store()
メソッドには保存ディレクトリを指定できます。保存ディレクトリは\{Laravelプロジェクト}\storage\app
以下を指定します。
$path = $request->addimage->store('public/upload');
戻り値は次のようなパス文字列です。
public/upload/5LN57Z3IiC8TyZDFC5OVaS8g6QuPdZCKMfuQO82w.jpeg
ファイル名を指定して保存する
ファイル名を指定したい場合はstoreAs()
メソッドを使用します。
$path = $request->addimage->storeAs('public/upload', '00001.jpeg');
戻り値は次のようになります。
public/upload/00001.jpeg
取得したパス文字列からファイル名を取得するにはbasename()
メソッドを使用します。
basename($path);
=>'00001.jpeg'
storage/app/public
は一般公開へのアクセスを許すファイルの格納先です。保存ファイルの公開
保存したファイルを公開するには、ファイルの保存先へのシンボリックリンクを生成する必要があります。
シンボリックリンクは\{Laravelプロジェクト}
配下でコマンドプロンプトからphp artisan storage:linkを実行します。
>php artisan storage:link
The [public/storage] directory has been linked.
シンボリックリンクが生成され、\public\storage
へのアクセスが\{Laravelプロジェクト}\storage\app\public
を参照するようになります。