Laravelのバリデーターは予め多彩なルールが用意されています。 私自身は.Net歴が長いので数値範囲はRangeのアノテーションみたいな感じで指定すればいいという先入観からちょっとハマりました。 …
LaravelでアップロードしたCSVファイルのバリデーション定義を紹介します。
CSVのレコードではなく、Requestに含まれるCSVファイル自体のバリデーションに関する記事です。
mimesやmimetypesで少々クセがあるので注意が必要です!
バリデーションルール
private static function rules()
{
return [
'csv_file' => [
'required', // 必須チェック
'max:1024', // ファイルサイズ上限
'file', // file属性でアップロードされたファイル
'mimes:csv,txt', // 拡張子
'mimetypes:text/plain', // Laravelが判定したmimetypes
],
];
}
max ファイルサイズ上限
アップロード可能なファイルサイズの上限です。
妥当なファイルサイズに制限したい場合に指定します。
大容量のサイズを指定する場合、Laravel以前にPHPの設定ファイル「php.ini」でアップロード最大サイズ、POST最大サイズを変更しなければ、エラーとなるので注意して下さい。
mimes 拡張子
CSVファイルなんだからcsv
でしょ?と思ってcsvだけを許可対象にするとバリデーションが通りません。
ファイルの拡張子ではなく、mimesなので「text/csv」 = textとcsvの2種類を許可
する必要があります。
公式にもっと分かりやすく書いておいて欲しいです。
mimetypes Laravelが判定したmimetypes
mimetypesなんだからtext/csv
でしょ?と思って指定すると通りません。
理由は分かりませんがtext/plain
を許可する必要があります。
(チラ裏)
いやー・・・ 普通に見ていったらtext/csv指定するでしょ…
1. $request->file(‘csv_file’)のminetypes属性はtext/csv
2. 公式リファレンス資料の記載もtext/csv
公式リファレンス資料:MIMEタイプと対応する拡張子の完全なリスト
https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
コメントを書く