Laravel: Maximale Dateigröße validieren?

Lesezeit: 3 Minuten

Benutzeravatar von Jim Peeters
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

Benutzeravatar von Filip Koblański
Filip Koblański

Entsprechend die Dokumentation:

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

Der Wert ist in Kilobyte, zum Beispiel:

  • max:10240 = maximal 10 MB.

  • max:1 = maximal 1024 Bytes.

Notiz dass es Bemühungen gibt, den Wert zu ändern 1 kilobytes vom Original 1024 Zu 1000 Bytes, Aber große Frameworks wie Laravel Original verwenden 1024 Wert, der Verwirrung bei erfahrenen Entwicklern verhindert (die daran gewöhnt sind 1024).

  • 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

  • könnten Sie einen Link zur Dokumentation hinzufügen? konnte es nicht finden

    – Felix Geenen

    5. März 2021 um 16:19 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

Benutzeravatar des NULL-Zeigers
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.

Jedoch 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"
    ];
  }
}

1449340cookie-checkLaravel: Maximale Dateigröße validieren?

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

Privacy policy