コントローラでのアップロードファイル操作|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以下を指定します。

ファイル名は自動で生成されます。
\{Laravelプロジェクト}\storage\app\public\uploadへ保存する場合
$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を参照するようになります。

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です