2016-07-12 1 views
5

Ich muss mehrere hochgeladene Dateien validieren und sicherstellen, dass sie von einem bestimmten Typ und unter 2048 KB sind. Die folgende scheint nicht alle Dateien im Array "Dateien" zu überprüfen und vermutet nur die geposteten Dateien ungültiger Mime-Typ, wie es scheint, das Array-Objekt und nicht seinen Inhalt zu überprüfen.Überprüfen mehrerer Dateien im 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);    } 

} 

Antwort

15

Sie können Datei Array wie jedes Eingabefeld in Laravel 5.2 validieren. Diese Funktion ist neu in Laravel 5.2. Sie können folgendes tun:

$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

Danke, hat den Trick gemacht. Ich frage mich, ob es eine Kurzform gibt, um auch eine Regel zu machen, bei der alle Dateien im Array nicht mehr als 5 MB überschreiten können? – LaserBeak

+0

Ändern Sie das Maximum auf 'max: 5000' –

+0

Aber wäre das 5000kb pro Bilddatei oder für das gesamte Array? Ich denke pro Datei – LaserBeak

3

Bitte versuchen Sie dies:

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

auf diese Weise versuchen.

// 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 
}