📘
ローカルにあるファイルを取得してファイル名を取得したりしたい場合(larvel)
大体画像とかファイル系を扱う場合は、リクエストでとってきたものを処理しますよね。
$file = request()->file("file");
$fileNmae = $file->getClientOriginalName();
これをローカルのファイルでも同じようなことを行いたかったのです。
UploadedFileクラスを使います。
リクエストで取得してきたファイル(上記のコードの例で言うと変数$file)は UplodedFileクラスのインスタンスなんですね。
僕はローカルのファイルを取得しようとして Storage::get(storage_path("app/test.png"))
とか言うふうにStorageを使用していたのですが、 Storageではダメなんですね。
なので、UploadedFileクラスを使用して、インスタンスを作成します。
$image = new UploadedFile(storage_path("app/test.png", "test.png");
$fileName = $image->getClientOriginalName();
これで無事にリクエストでファイルを取得してくる場合と同じ状況を作ることができました。
※おまけ
例えば、ローカルのとあるフォルダ全ての画像を取得したいと言う場合はStorageを使用できます。
こんな感じになります。
$localFiles = Storage::disk("local")->files("/images");
foreach ($localFiles as $file) {
$image = new UploadedFile(storage_path("app/" . $file), $file);
$fileName = $image->getClientOriginalName();
}
意外とネット上に全然情報がなく苦戦しましたが、一回できればなんと言うこともないですね。
Discussion