https://laravel.com/docs/6.x/requests#retrieving-uploaded-files
Laravel でアップロードしたファイルについて情報を取得したいときは $request->file('file_name')
とすれば取れる。
(ちなみに遡っていくと、Symfonyの Uploaded files
を使っているらしい)
これを使ってファイルの種類を判別したいときにあった二つのメソド
getMimeType()
getClientMimeType()
がちょっと紛らわしかったのでまとめ。
ちなみにやりたいこと
ユーザーのアップロードしたファイルがCSVであるかのバリデーションをかけたい。
CSVをアップロードしたときにそれぞれが返すもの
getMimeType()
"text/plain"
getClientMimeType()
"text/csv"
どっちを使うべきなの?
"text/csv"
を返す getClientMimeType()
を使うのが良いかと思ったけど、
これはファイルの拡張子を見てるだけみたいなので、拡張子はあってるけど安全でないファイルがアップロードされてしまう危険性がある。
一方の getMimeType()
はテンポラリディレクトリにアップロードされたファイル(拡張子がない状態)を見るので、テキストファイルであることしか保証はできなくなるが、とりあえずはこっちを使う方が安全そう。
参考
https://nobuhiroharada.com/2019/06/19/laravel-how-to-get-uploaded-file-info/
https://polidog.jp/2018/07/19/symfony_validator/
https://stackoverrun.com/ja/q/10859443