2016-07-12 38 views
5

Devo convalidare più file caricati, assicurandomi che siano di un tipo specifico e inferiori a 2048kb. Il sotto non sembra controllare tutti i file nell'array 'file' e presume solo i file inviati di tipo mime non valido in quanto sembra controllare l'oggetto dell'array e non il suo contenuto.Convalida di più file nell'array

public function fileUpload(Request $request) 
    { 

     $validator = Validator::make($request->all(), [ 
      'files' => 'required|mimes:jpeg,jpg,png', 
     ]); 

     if ($validator->fails()) 
     { 
      return response()->json(array(
       'success' => false, 
       'errors' => $validator->getMessageBag()->toArray() 

      ), 400);    } 

} 

risposta

15

È possibile convalidare matrice del file come qualsiasi matrice di ingresso in laravel 5.2. Questa funzione è nuova in Laravel 5.2. Puoi fare quanto segue:

$input_data = $request->all(); 

$validator = Validator::make(
    $input_data, [ 
    'image_file.*' => 'required|mimes:jpg,jpeg,png,bmp|max:20000' 
    ],[ 
     'image_file.*.required' => 'Please upload an image', 
     'image_file.*.mimes' => 'Only jpeg,png and bmp images are allowed', 
     'image_file.*.max' => 'Sorry! Maximum allowed size for an image is 20MB', 
    ] 
); 

if ($validator->fails()) { 
    // Validation error.. 
} 
+0

Grazie, ha fatto il trucco. Mi chiedo se ci sia un modo stenografico per fare una regola in cui tutti i file nell'array non possono eccedere i 5 MB? – LaserBeak

+0

cambia il max a 'max: 5000' –

+0

Ma sarebbe 5000kb per file di immagine o per l'intero array? Sto indovinando per file – LaserBeak

3

Si prega di provare questo:

public function fileUpload(Request $request) { 
    $rules = []; 
    $files = count($this->input('files')) - 1; 
    foreach(range(0, $files) as $index) { 
     $rules['files.' . $index] = 'required|mimes:png,jpeg,jpg,gif|max:2048'; 
    } 

    $validator = Validator::make($request->all() , $rules); 

    if ($validator->fails()) { 
     return response()->json(array(
      'success' => false, 
      'errors' => $validator->getMessageBag()->toArray() 
     ) , 400); 
    } 
} 
0

provare in questo modo.

// getting all of the post data 
$files = Input::file('images'); 

// Making counting of uploaded images 
$file_count = count($files); 

// start count how many uploaded 
$uploadcount = 0; 

foreach($files as $file) { 
    $rules = array('file' => 'required'); //'required|mimes:png,gif,jpeg,txt,pdf,doc' 
    $validator = Validator::make(array('file'=> $file), $rules); 
     if($validator->passes()){ 
      $destinationPath = 'uploads'; 
       $filename = $file->getClientOriginalName(); 
       $upload_success = $file->move($destinationPath, $filename); 
       $uploadcount ++; 
     } 
} 

if($uploadcount == $file_count){ 
    //uploaded successfully 
} 
else { 
    //error occurred 
}