2017-06-27 5 views
2

möchte ich verschiedene max Dateigrößen für verschiedene Dateitypen festlegen, wie:Unterschiedliche maximale Dateigröße für verschiedene Dateitypen?

  • 10 MB maximale Dateigröße für Bilder (PNG, JPEG und GIF)
  • 50 MB maximale Dateigröße für Videos (MP4 Rechts

) jetzt, meine Prüfung erlaubt nur 10 MB für alle Dateitypen:

$validator = Validator::make($request->all(), [ 
    'file' => 'required|max:10000|mimes:jpg,jpeg,png,gif,mp4', 
]); 

Wie kann ich verschiedene max Dateigrößen für verschiedene Dateitypen festgelegt ?

+2

ich tun würde, auch eine Client-seitige Validierung (JavaScript) so Benutzer 12mb Bild nicht laden und dann heißt es: „Sie können nicht“, besser noch einfach Benutzer Upload 50MB Datei erlauben, aber dann das Bild zuschneiden/Größe verändern (Ich weiß, das ist nicht das, wonach Sie gefragt haben, aber es ist eine Art Lösung) - mehr Arbeit für Sie weniger für den Benutzer. Auch wenn ich nicht viele Bilder kenne, die als RAW aufgenommen und dann in ein geeignetes Format konvertiert werden, um eine Größe von mehr als 10 MB zu erreichen. Viel Spaß :) – Kyslik

Antwort

2

Sie können diese Frage mit der Regel if-Bedingung lösen. Ich weiß, es ist keine Best Practice, aber es könnte Ihr Problem lösen.

$default_max_value = 10000; 
if($request->hasFile('file') && $request->get('file')->getClientOriginalExtension() == 'mp4'){ 
    $default_max_value = 50000; 
} 

$validator = Validator::make($request->all(), [ 
    'file' => 'required|max:'.$default_max_value.'|mimes:jpg,jpeg,png,gif,mp4', 
]); 
+0

Das ist eigentlich eine nette Lösung, aber ich würde 'getMimeType() 'verwenden, da der Benutzer sich der Verwendung von'' getClientOriginalExtension() '] (http://api.symfony.com/3.0/Symfony/Component/HttpFoundation /File/UploadedFile.html#method_getClientOriginalExtension) könnte über die Erweiterung liegen (dies wird auch auf der Symfony API Seite angegeben) – Kyslik

+0

Sicher, 'getMimeType' ist besser als' getClientOriginalExtension() 'in der Sicherheitspunktsicht. Aber ich bin mir nicht sicher, dass es die beste Lösung ist. Laravel haben immer etwas Magie über die Herausforderungen. – bl4cksta

+0

Seine eigentliche Symphonie-Komponente, die verwendet wird. ['getClientMimeType()'] (http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html#method_getClientMimeType) ist das Beste aus beiden Welten. – Kyslik

Verwandte Themen