web-dev-qa-db-ja.com

Laravel 5介入での画像検証

intervention in Laravel 5.1をインストールしました。画像アップロードを使用し、次のようなサイズに変更します。

Route::post('/upload', function()
{
Image::make(Input::file('photo'))->resize(300, 200)->save('foo.jpg');
});

私が理解していないことは、介入がアップロードされた画像の検証をどのように処理するのですか?つまり、介入には既に組み込みのイメージ検証チェックが含まれていますか、またはLaravel Validationを使用して手動で追加する必要があるファイルフォーマット、ファイルサイズ、など。?私は介入ドキュメントを読みましたが、laravelで介入を使用する場合の画像検証の動作に関する情報を見つけることができませんでした。

誰かが私を正しい方向に向けることができますか..

11
Neel

@maythamのコメントに感謝し、正しい方向を示してくれました。

私が見つけたのは、画像介入はそれ自体で検証を行わないということです。すべての画像検証は、アップロードのために画像の介入に渡される前に実行する必要があります。 imagemime型などのLaravelの組み込みバリデーターのおかげで、画像の検証が非常に簡単になりました。これは、ファイル入力をImage Interventionに渡す前に最初に検証する場所です。

介入を処理する前の検証者チェックImageクラス:

 Route::post('/upload', function()
 {
    $postData = $request->only('file');
    $file = $postData['file'];

    // Build the input for validation
    $fileArray = array('image' => $file);

    // Tell the validator that this file should be an image
    $rules = array(
      'image' => 'mimes:jpeg,jpg,png,gif|required|max:10000' // max 10000kb
    );

    // Now pass the input and rules into the validator
    $validator = Validator::make($fileArray, $rules);

    // Check to see if validation fails or passes
    if ($validator->fails())
    {
          // Redirect or return json to frontend with a helpful message to inform the user 
          // that the provided file was not an adequate type
          return response()->json(['error' => $validator->errors()->getMessages()], 400);
    } else
    {
        // Store the File Now
        // read image from temporary file
        Image::make($file)->resize(300, 200)->save('foo.jpg');
    };
 });

お役に立てれば。

16
Neel

単に、これを統合して検証を取得します

$this->validate($request, ['file' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',]);
5
Rahul Hirve

カスタムフォームがあり、このバリアントは機能しません。だから私は正規表現の検証を使用しました

このような:

  client_photo' => 'required|regex:/^data:image/'

誰かに役立つかもしれない

1
Alex Semenov

サポートされている画像形式http://image.intervention.io/getting_started/formats

読み取り可能な画像形式は、選択したドライバー(GdまたはImagick)とローカル構成によって異なります。デフォルトでは、Intervention Imageは現在、次の主要な形式をサポートしています。

    JPEG PNG GIF TIF BMP ICO PSD WebP

Gd✔️✔️✔️----✔️*

Imagick✔️✔️✔️✔️✔️✔️✔️✔️*

  • WebPサポートの場合、imagewebp()を使用するには、GdドライバーをPHP 5> = 5.5.0またはPHP 7で使用する必要があります。Imagickを使用する場合、 WebPサポートのためにlibwebpでコンパイルする必要があります。

Makeメソッドのドキュメントを参照して、さまざまなソースから画像形式を読み取り、それぞれエンコードおよび保存して画像を出力する方法を確認する方法を確認してください。

注:(Intervention ImageはオープンソースですPHP画像処理および操作ライブラリhttp:// image.intervention.io/ )。このライブラリは検証ルールを検証せず、Larvalによって行われましたValidator class

Laravel Doc https://laravel.com/docs/5.7/validation

ヒント1:(リクエストの検証)

$request->validate([
   'title' => 'required|unique:posts|max:255',
   'body' => 'required',
   'publish_at' => 'nullable|date',
]); 

// Retrieve the validated input data...
$validated = $request->validated(); //laravel 5.7

ヒント2:(コントローラーの検証)

   $validator = Validator::make($request->all(), [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    if ($validator->fails()) {
        return redirect('post/create')
                    ->withErrors($validator)
                    ->withInput();
    }
1
venkatSkpi