Wie validiere ich die maximale Dateigröße in Laravel?

Lesezeit: 3 Minuten

Wie validiere ich die maximale Dateigrose in Laravel
Jim Peeters

Ich versuche, eine maximale Dateigröße von 500 KB in Laravel zu validieren:

$validator = Validator::make($request->all(), [
    'file' => 'size:500',
]);

Diese besagt aber, dass die Datei genau 500kb groß sein soll. Wie kann ich diese Regel so bearbeiten, dass sie einen Fehler zurückgibt, wenn sie größer als 500 KB ist?

Ich habe das versucht:

'file' => 'size:>=500'
'file'  => 'size:max:500'

Die Dokumentation sagt dazu nichts:

Größe:Wert

Das zu validierende Feld muss eine Größe haben, die dem angegebenen Wert entspricht. Bei Zeichenfolgendaten entspricht der Wert der Anzahl der Zeichen. Bei numerischen Daten entspricht der Wert einem gegebenen ganzzahligen Wert. Bei Dateien entspricht size der Dateigröße in Kilobyte.

  • benutze **file’ => ‘size:500’ ** . dh Dateigröße nicht größer als 500kb

    – Yasin Patel

    25. Mai 2016 um 9:25 Uhr

  • @YasinPatel du liegst falsch, der size Validierung ist der genaue Wert

    – Filip Koblański

    25. Mai 2016 um 9:29 Uhr

Wie validiere ich die maximale Dateigrose in Laravel
Filip Koblański

Entsprechend die Dokumentation:

$validator = Validator::make($request->all(), [
    'file' => 'max:500000',
]);

Der Wert wird in Kilobyte angegeben. Dh max:10240 = maximal 10 MB.

  • Nun … wenn es in Kilobyte wäre, wie in der Dokumentation angegeben, sollte es max: 10000 für 10 MB sein. Andernfalls sollte die Dokumentation die Größe als Kibibytes oder KiB angeben

    – shock_gone_wild

    3. Januar 2018 um 13:26 Uhr

  • The value is in kilobytes. I.e. max:10240 = max 10 MB. Das bedeutet also 'file' => 'max:1' bedeutet 1 Kilobyte?

    – Marwin

    17. Mai 2019 um 15:06 Uhr


  • Wenn der Wert bereits in Kilobyte angegeben ist, sollte er nur 10000 betragen, der 1024-Multiplikator gilt nur, wenn von Bit zu Byte übergegangen wird.

    – AaronHS

    10. Oktober 2019 um 3:33 Uhr

  • Diese Lösung hat bei mir nicht funktioniert. Das System hat ein Bild mit 6,5 MB hochgeladen. Code ist $validator = Validator::make($request->all(), [ ‘profile_image’=>’mimes:jpeg,jpg,png|max:2000’ ]);

    – Kamlesh

    8. Februar 2020 um 8:23 Uhr

  • Es wird in der Max-Attribut-Dokumentation darauf angespielt, laravel.com/docs/8.x/validation#rule-maxdie besagt, dass es genauso funktioniert wie size, und die Größendokumentation: laravel.com/docs/8.x/validation#rule-sizedas seine in Kilobyte angibt.

    – JVE999

    8. Mai 2021 um 0:35 Uhr

1647851647 930 Wie validiere ich die maximale Dateigrose in Laravel
Null Zeiger

Bearbeiten: Achtung! Diese Antwort funktionierte in meiner XAMPP-OsX-Umgebung, aber als ich sie in AWS EC2 bereitstellte, verhinderte sie den Upload-Versuch NICHT.

Ich war versucht, diese Antwort zu löschen, da sie FALSCH ist, aber stattdessen werde ich erklären, was mich gestolpert hat

Mein Datei-Upload-Feld heißt “Upload”, also bekam ich “Der Upload konnte nicht hochgeladen werden.”. Diese Nachricht kommt aus dieser Zeile in der Validation.php:

in resources/lang/en/validaton.php:

'uploaded' => 'The :attribute failed to upload.',

Und dies ist die Meldung, die angezeigt wird, wenn die Datei größer als das von PHP festgelegte Limit ist.

Ich möchte diese Nachricht überschreiben, was Sie normalerweise tun können, indem Sie ein drittes Parameter-Array $messages an die Methode Validator::make() übergeben.

aber Ich kann das nicht tun, da ich den POST von einer React-Komponente aus aufrufe, die das Formular mit dem csrf-Feld und dem Upload-Feld rendert.

Also habe ich mich als Super-Hack entschieden, in meine Ansicht zu gelangen, die die Nachrichten anzeigt, und diese spezifische Nachricht durch meine freundliche Nachricht „Datei zu groß“ zu ersetzen.

Folgendes funktioniert, wenn die Datei kleiner als die PHP-Dateigrößenbeschränkung ist:

Falls jemand anderes die Laravel FormRequest-Klasse verwendet, hier ist, was bei Laravel 5.7 für mich funktioniert hat:

So lege ich eine benutzerdefinierte Fehlermeldung und die maximale Dateigröße fest:

Ich habe ein Eingabefeld <input type="file" name="upload">. Beachten Sie, dass das CSRF-Token auch im Formular erforderlich ist (google laravel csrf_field für die Bedeutung).

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class Upload extends FormRequest
{
  ...
  ...
  public function rules() {
    return [
      'upload' => 'required|file|max:8192',
    ];
  }
  public function messages()
  {
    return [            
      'upload.required' => "You must use the 'Choose file' button to select which file you wish to upload",
      'upload.max' => "Maximum file size to upload is 8MB (8192 KB). If you are uploading a photo, try to reduce its resolution to make it under 8MB"
    ];
  }
}

1005230cookie-checkWie validiere ich die maximale Dateigröße in Laravel?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy