web-dev-qa-db-ja.com

Laravelで最大ファイルサイズを検証する方法は?

Laravelの最大ファイルサイズ500kbで検証しようとしています:

$validator = Validator::make($request->all(), [
    'file' => 'size:500',
]);

しかし、これはファイルのサイズが正確に500kbでなければならないことを示しています。 500kbを超える場合にエラーを返すようにこのルールを編集するにはどうすればよいですか?

私はこれを試しました:

'file' => 'size:>=500'
'file'  => 'size:max:500'

ドキュメントにはこれについて何も書かれていません:

サイズ:値

検証中のフィールドのサイズは、指定された値と一致する必要があります。文字列データの場合、値は文字数に対応します。数値データの場合、値は指定された整数値に対応します。ファイルの場合、サイズはキロバイト単位のファイルサイズに対応します。

32
Jim Peeters

ドキュメントによると:

$validator = Validator::make($request->all(), [
    'file' => 'max:500000',
]);

値はキロバイト単位です。つまりmax:10240 =最大10 MB。

76

編集:警告!この回答は私の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"
    ];
  }
}
0
NULL pointer