Laravel – アップロードファイルの保存

概要

フォームからアップロードされたファイルをサーバーの場所を指定して保存する手順について整理する。

フォームから取得したUploadedFileオブジェクトを介して、一時保存されたファイルの実体を、store()メソッドやstoreAs()メソッドで所定の場所に保存する。

ファイル取得

ここでは画像ファイルのアップロードを題材とし、アップロードファイルのUploadedFileオブジェクトを取得済みとする。

アップロードファイルの取得についてはこちらを参照。

ファイル保存の流れ

フォームでファイルを選択・アップロードし、それをサーバーに保存する流れは以下の通り。

  • フォームのname属性値からUploadedFileオブジェクトを取得
  • store()メソッドやstoreAs()メソッドで保存
  • メソッドの戻り値から、保存されたファイルのパスを取得
  • パスをデータベースに保存するなどの処理を実行

実装例

アップロードファイル取得のコード中、storeアクションの内容を以下の様に書き換える。ここでは得られたファイルパスを表示させて、そこで実行を停止している。

store()/storeAs()

UploadedFile::store()メソッド

標準形

  • 引数にファイルを保存するディレクトリーとディスクを指定する
    →省略不可
  • 指定した場所にアップロードファイルが保存される
  • 戻り値として、ランダム文字列化されたファイル名を含むパスが返される

引数が''の場合

ファイルパスの内容。

保存されたファイルの確認。

引数にディレクトリーを指定

ここでは引数に'test'というディレクトリーを指定している。

戻り値のパスは、testディレクトリー下にファイルが位置している。

storage/appの下にtestディレクトリーが存在すればその下に、存在しなければ新たにtestディレクトリーが作成されてその下にファイルが保存される。

第2引数にディスクを指定

以下の例では、store()の第2引数に'public'を指定している。filesystems.phpでのpublicディスクの定義から、この場合のアップロードファイルはstorage/app/public下のtestディレクトリーの下に保存される。

store('ディスク内のディレクトリー', 'ディスク');

戻り値のパス。ディスク内のtestディレクトリーに続いてランダム文字列でファイル名が生成されている。

確認すると、確かにstorage/app/public/testの下にファイルが保存されている。なおtestディレクトリーが存在しないときは、新たに作成される。

UploadedFile::storeAs()メソッド

store()メソッドはアップロードファイルに新たにランダム文字列でファイル名をつけるが、特定の名前を与えて保存したいときにはstoreAs()メソッドを使う。使い方や戻り値はstore()と同じ。

第3引数は省略可能で、その場合はstore()で第2引数を省略した時と同じ場所にファイルが保存される。

以下の例ではpublicディスクを指定しているが、その場所はfilesystems.phpstorage/app/publicと定義されている

戻り値のファイルパス。ディレクトリーの後に指定したファイル名が続いている。

指定された場所にファイルが保存されているのが確認できる。

ファイルのパスのデータベース登録

store()/storeAs()の戻り値で得られたパスをデータベースに保存することで、画像表示などに活用できる。

具体的には、以下の例の様にパス名を登録するカラムにstore()の戻り値がセットされた$pathの内容を登録する。

 

コメントを残す

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