146 votes

Comment vérifier la taille du fichier en entrée avec jQuery ?

J'ai un formulaire avec des capacités de téléchargement de fichiers et j'aimerais pouvoir avoir des rapports d'erreur côté client si le fichier que l'utilisateur essaie de télécharger est trop gros. Existe-t-il un moyen de vérifier la taille du fichier avec jQuery, soit purement sur le client, soit en renvoyant le fichier au serveur pour vérification ?

289voto

Felipe Sabino Points 7853

En fait, vous n'avez pas accès au système de fichiers (par exemple, pour lire et écrire des fichiers locaux). Toutefois, en raison de la spécification de l'Api fichier HTML5, vous avez accès à certaines propriétés des fichiers, dont la taille.

Pour le HTML ci-dessous

<input type="file" id="myFile" />

essayez ce qui suit :

//binds to onchange event of your input field
$('#myFile').bind('change', function() {

  //this.files[0].size gets the size of your file.
  alert(this.files[0].size);

});

Comme il fait partie de la spécification HTML5, il ne fonctionnera que pour les navigateurs modernes (v10 requise pour IE) et j'ai ajouté aquí plus de détails et des liens vers d'autres informations sur les fichiers que vous devez connaître : http://felipe.sabino.me/javascript/2012/01/30/javascipt-checking-the-file-size/


Prise en charge des anciens navigateurs

Sachez que les anciens navigateurs renvoient un null pour la valeur précédente this.files donc l'accès à this.files[0] lèvera une exception et vous devrez vérifier la prise en charge de l'API fichier avant de l'utiliser

6 votes

Tout le monde dit que ce n'est pas possible - et pourtant c'est le cas. Cela fonctionne. Je l'ai testé.

35 votes

@Jeroen Je suis d'accord pour dire que le fait de ne pas fonctionner pour IE fait que ce n'est pas la solution idéale pour beaucoup de gens, mais ne pas donner un vote négatif et dire que la réponse est inutile n'est-il pas un peu trop ? J'ai utilisé cette solution dans une grande variété de solutions web d'entreprise qui avaient dans le champ d'application la nécessité de fonctionner uniquement dans chrome et / ou firefox, et certaines personnes à la recherche de cette solution pourrait être dans le même endroit, donc cette solution sera assez bonne.

4 votes

Je viens de trouver cette réponse sur Google et je vais l'utiliser pour empêcher les utilisateurs de poster des fichiers qui dépassent une taille donnée ; comme je vérifie également la taille des fichiers du côté du serveur, je suis content d'avoir une solution côté client qui ne fonctionne pas dans IE8.

47voto

Naoise Golden Points 2969

Si vous souhaitez utiliser l'outil jQuery validate vous pouvez le faire en créant cette méthode :

$.validator.addMethod('filesize', function(value, element, param) {
    // param = size (en bytes) 
    // element = element to validate (<input>)
    // value = value of the element (file name)
    return this.optional(element) || (element.files[0].size <= param) 
});

Vous l'utiliseriez :

$('#formid').validate({
    rules: { inputimage: { required: true, accept: "png|jpe?g|gif", filesize: 1048576  }},
    messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" }
});

1 votes

@Dan oui, la propriété de la taille du fichier fait partie de la spécification HTML5, elle ne fonctionnera donc que pour les navigateurs modernes (pour IE, ce serait la version 10+).

7 votes

Vous avez incorrectement utilisé le accept alors que vous auriez dû utiliser la règle extension règle. ~ En accept règle est uniquement pour les types MIME. En extension règle est pour les extensions de fichiers. Vous devez également inclure le site additional-methods.js fichier pour ces règles.

0 votes

Complétant le commentaire assertif de @Sparky : $('#formid').validate({ rules: { inputimage: { required: true, extension: "png|jpe?g|gif", filesize: 1048576 }}, messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" } });

31voto

jeferod83 Points 61

Ce code :

$("#yourFileInput")[0].files[0].size;

Renvoie la taille du fichier pour une entrée de formulaire.

Sur FF 3.6 et plus, ce code devrait être :

$("#yourFileInput")[0].files[0].fileSize;

2 votes

Votre premier code fonctionne dans chrome mais le second ne fonctionne pas pour la dernière version de FireFox.

0 votes

Ce deuxième code est ce que j'ai dû utiliser pour tous les navigateurs modernes (2014+).

1 votes

Le premier code fonctionne avec IE 10, 11, Edge, Chrome, Safari (version Windows), Brave et Firefox.

4voto

Robert Harvey Points 103562

Vous devrez renvoyer le fichier sur le serveur. Pour des raisons de sécurité, jQuery (Javascript) n'a pas accès à votre système de fichiers.

Si vous pouvez utiliser Java ou Flash dans le navigateur, vous pouvez vérifier de cette façon.

2voto

Kelsey Points 26456

Vous pouvez effectuer ce type de vérification avec Flash ou Silverlight mais pas avec Javascript. La sandbox javascript ne permet pas l'accès au système de fichiers. La vérification de la taille doit être effectuée côté serveur après le téléchargement.

Si vous voulez emprunter la voie de Silverlight/Flash, vous pouvez vérifier que, s'ils ne sont pas installés, un gestionnaire de téléchargement de fichiers ordinaire utilisant les contrôles normaux sera utilisé par défaut. De cette façon, si Silverlight/Flash est installé, l'expérience sera un peu plus riche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X