web-dev-qa-db-fra.com

Validation de l'image dans Laravel 5 Intervention

J'ai installé intervention dans Laravel 5.1 et j'utilise le téléchargement d'image et redimensionne quelque chose comme ceci:

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

Ce que je ne comprends pas, c'est comment l'intervention traite-t-elle la validation de l'image téléchargée? Je veux dire, est-ce que l'intervention a déjà le contrôle de validation d'image en construction ou est-ce quelque chose que je dois ajouter manuellement en utilisant Laravel Validation pour vérifier les formats de fichier, les tailles de fichier, etc ..? J'ai lu les documents d'intervention et je n'ai pas pu trouver d'informations sur le fonctionnement de la validation d'image lors de l'utilisation d'une intervention avec laravel.

Quelqu'un peut-il m'orienter dans la bonne direction s'il vous plaît ..

11
Neel

Merci à @maytham pour ses commentaires qui m'ont indiqué la bonne direction.

Ce que j'ai découvert, c'est que l'intervention d'image ne fait aucune validation par elle-même. Toute validation d'image doit être effectuée avant sa transmission à l'intervention d'image pour le téléchargement. Grâce aux validateurs intégrés de Laravel comme les types image et mime, ce qui rend la validation de l'image vraiment facile. C'est ce que j'ai maintenant où je valide d'abord l'entrée de fichier avant de la passer à Image Intervention.

Vérification du validateur avant le traitement de l'intervention Image Classe:

 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');
    };
 });

J'espère que cela t'aides.

16
Neel

Simplement, intégrez ceci pour obtenir la validation

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

j'ai un formulaire personnalisé et cette variante ne fonctionne pas. J'ai donc utilisé la validation regex

comme ça:

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

peut-être que ce sera utile pour quelqu'un

1
Alex Semenov

Formats pris en charge par l'image http://image.intervention.io/getting_started/formats

Les formats d'image lisibles dépendent du pilote choisi (Gd ou Imagick) et de votre configuration locale. Par défaut, Intervention Image prend actuellement en charge les principaux formats suivants.

    JPEG PNG GIF TIF BMP ICO PSD WebP

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

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

  • Pour la prise en charge WebP, le pilote Gd doit être utilisé avec PHP 5> = 5.5.0 ou PHP 7 pour utiliser imagewebp (). Si Imagick est utilisé, il doit être compilé avec libwebp pour le support WebP.

Voir la documentation de la méthode make pour voir comment lire les formats d'image à partir de différentes sources, respectivement encoder et enregistrer pour savoir comment sortir des images.

REMARQUE: ( Image d'intervention est une source ouverte PHP bibliothèque de manipulation et de manipulation d'images http: // image.intervention.io/ ). Cette bibliothèque ne valide aucune règle de validation, elle a été réalisée par Larval Classe Validator

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

Astuces 1: (Demander la validation)

$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

Conseils 2: (validation du contrôleur)

   $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