Laravel CSVのmimes, mimetypesのバリデーション設定例

Laravel CSVのmimes, mimetypesのバリデーション設定例

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

プログラミングカテゴリの最新記事