Mon site Web est hébergé sur un serveur partagé. La limite maximale de téléchargement est de 5 Mo. Toutes les validations et le téléchargement de fichiers fonctionnent correctement si le fichier téléchargé fait moins de 5 Mo. Mais quand un fichier supérieur à 5Mo est téléchargé, je vois ceci . Comment valider ou forcer le fichier à se trouver sous la limite de téléchargement à partir du serveur?
Vous ne semblez pas intéressé à modifier les limites PHP pour autoriser les fichiers plus volumineux. Il me semble que vous voulez que votre envoi maximal soit de 5 Mo et que vous receviez une réponse correcte si c'est terminé.
Vous pouvez gérer l'exception FileException
dans votre gestionnaire d'exceptions à app/Exceptions/Handler.php
. Mettez à jour la méthode render
pour ajouter le code dont vous avez besoin. Par exemple, si vous souhaitez renvoyer une exception de validation, vous devez gérer la validation dans le gestionnaire d'exceptions pour l'exception FileException
.
public function render($request, Exception $exception)
{
if ($exception instanceof \Symfony\Component\HttpFoundation\File\Exception\FileException) {
// create a validator and validate to throw a new ValidationException
return Validator::make($request->all(), [
'your_file_input' => 'required|file|size:5000',
])->validate();
}
return parent::render($request, $exception);
}
Ceci n’a pas été testé, mais devrait vous donner l’idée générale.
Vous pouvez également effectuer une validation côté client via javascript, de sorte qu'un fichier trop volumineux ne soit jamais réellement envoyé sur votre serveur. Toutefois, le javascript peut être désactivé ou supprimé par le client. Il serait donc utile de configurer la gestion côté serveur de Nice. .
Pour la validation côté client, si vous associez un gestionnaire d'événements à l'événement "change" pour l'entrée de fichier, vous pouvez vérifier la taille du fichier à l'aide de this.files[0].size
, puis effectuer toute action supplémentaire qui suit (désactiver le formulaire, supprimer le fichier téléchargé, etc.).
$validator = Validator::make($request->all(), [
'file' => 'max:5120', //5MB
]);
dans votre contrôleur
et dans php.ini
upload_max_filesize = 10MB
post_max_size et upload_max_filesize sont des directives que vous pouvez définir pour configurer votre fichier php.ini OR fichier .htaccess OR fichier httpd.conf.
Exemple php.ini:
post_max_size=15M
upload_max_filesize=15M
.htaccess exemple:
php_value post_max_size=15M
php_value upload_max_filesize=15M
httpd.conf exemple:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
Vous pouvez utiliser les règles de validation de Laravel:
'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000',
taille: valeur
Le champ en cours de validation doit avoir une taille correspondant à la valeur donnée . Pour les données de chaîne, la valeur correspond au nombre de caractères. Pour données numériques, la valeur correspond à une valeur entière donnée. Pour un tableau, taille correspond au nombre de tableaux. Pour les fichiers, taille correspond à la taille du fichier en kilo-octets.
Vous pouvez en savoir plus sur la validation et son utilisation.
En laravel, vous pouvez valider comme ceci -
$validator = Validator::make($request->all(), [
'file' => 'max:5120',
]);
La valeur est en kilo-octets. c’est-à-dire max: 10240 = max 10 Mo .
lie à l'événement onchange de votre champ de saisie
$('#upFile').bind('change', function() {
//this.files[0].size gets the size of your file and then you can validate accourdingly...
alert(this.files[0].size);
});
J'espère que ceci vous aidera.
Vous pouvez le faire avec jQuery/javascript (ce qui signifie que le fichier ne sera pas téléchargé, mais vous pouvez le vérifier avant de l'envoyer à votre script PHP).
$('#myFile').bind('change', function() {
let filesize = this.files[0].size // On older browsers this can return NULL.
let filesizeMB = (filesize / (1024*1024)).toFixed(2);
if(filesizeMB <= 5) {
// Allow the form to be submitted here.
} else {
// Don't allow submission of the form here.
}
});
Mais faites toujours la validation côté serveur. Incase vous déplacez vers un site Web plus fort et voulez toujours que votre site Web fonctionne sans n'importe quels bizarreries.
$validator = Validator::make($request->all(), [
'file' => 'max:5120', //5MB
]);
Tout cela n'a pas été testé, mais devrait fonctionner.
La limite de 5 Mo est définie par votre hébergeur et ne peut probablement pas être modifiée.
Pour télécharger des fichiers plus volumineux que la limite, vous devrez le télécharger en plusieurs parties.
Un paquet laravel qui le fait: https://github.com/jildertmiedema/laravel-plupload
vous pouvez vérifier la taille de votre fichier par max validator
'file' => 'required|max:5128'; // max file size: 5M