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.
Entsprechend die Dokumentation:
$validator = Validator::make($request->all(), [
'file' => 'max:500000',
]);
Der Wert ist in Kilobyte, zum Beispiel:
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
).
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"
];
}
}
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