Laravelの最大ファイルサイズ500kbで検証しようとしています:
$validator = Validator::make($request->all(), [
'file' => 'size:500',
]);
しかし、これはファイルのサイズが正確に500kbでなければならないことを示しています。 500kbを超える場合にエラーを返すようにこのルールを編集するにはどうすればよいですか?
私はこれを試しました:
'file' => 'size:>=500'
'file' => 'size:max:500'
ドキュメントにはこれについて何も書かれていません:
サイズ:値
検証中のフィールドのサイズは、指定された値と一致する必要があります。文字列データの場合、値は文字数に対応します。数値データの場合、値は指定された整数値に対応します。ファイルの場合、サイズはキロバイト単位のファイルサイズに対応します。
ドキュメントによると:
$validator = Validator::make($request->all(), [
'file' => 'max:500000',
]);
値はキロバイト単位です。つまりmax:10240
=最大10 MB。
編集:警告!この回答は私のXAMPP OsX環境で機能しましたが、AWS EC2にデプロイしたときにアップロードの試行を妨げませんでした。
この答えは間違っているので削除したいと思いましたが、代わりに私がつまずいた原因を説明します
ファイルアップロードフィールドの名前は「upload」なので、「アップロードに失敗しました。」と表示されていました。このメッセージはvalidation.phpの次の行から来ています。
resources/lang/en/validaton.phpで:
'uploaded' => 'The :attribute failed to upload.',
これは、ファイルがPHPによって設定された制限よりも大きい場合に表示されるメッセージです。
このメッセージをオーバーライドしたいのですが、通常は3番目のパラメーター$ messages配列をValidator :: make()メソッドに渡すことで実行できます。
ただし csrfフィールドとアップロードフィールドを含むフォームをレンダリングするPOSTコンポーネントからReactを呼び出しているため、できません。
代わりに、非常に危険なハックとして、メッセージを表示するビューに入り、その特定のメッセージをわかりやすい「ファイルが大きすぎます」メッセージに置き換えることにしました。
ファイルのサイズがPHPのサイズ制限よりも小さい場合に機能するのは次のとおりです。
他の誰かがLaravel FormRequestクラスを使用している場合、ここでLaravel 5.7で機能しました。
これは、カスタムエラーメッセージと最大ファイルサイズを設定する方法です。
入力フィールド<input type="file" name="upload">
があります。 CSRFトークンは次の形式でも必要です(google laravel csrf_fieldこれが意味するもの)。
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class Upload extends FormRequest
{
...
...
public function rules() {
return [
'upload' => 'required|file|max:8192',
];
}
public function messages()
{
return [
'upload.required' => "You must use the 'Choose file' button to select which file you wish to upload",
'upload.max' => "Maximum file size to upload is 8MB (8192 KB). If you are uploading a photo, try to reduce its resolution to make it under 8MB"
];
}
}