2009-02-13 9 views
6

J'ai une étiquette d'entrée de fichier dans mon application Web. Je voudrais vérifier que le fichier n'est pas trop gros avant de l'envoyer au serveur. Bien sûr, j'ai toujours le côté serveur de validation. Y a-t-il un moyen de le faire avec JavaScript? Il doit fonctionner dans IE7 + et FF3 +. Je vous remercie.Comment récupérer la taille d'un fichier avant de le télécharger?

EDIT: certainsfichiersoutputfile [0] .filesize fonctionne dans FF, mais pas IE.

+0

Malheureusement, ceci est quelque chose qui n'est pas encore multi-plateforme sans utiliser de plugins (par exemple, flash). http://www.w3.org/TR/FileAPI/ sont les spécifications de travail qui sont supportées par Firefox. – Matthew

+0

Dupliquer: http://stackoverflow.com/questions/158149/how-do-you-restrict-the-size-of-a-file-being-uploaded-with-javascript-or-java-w –

+0

Voir [cette nouvelle question et réponse.] (http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation) Dans les navigateurs modernes, cela est possible sans une demande au serveur, bien que la validation doive être faite sur le serveur aussi bien. – Pointy

Répondre

2

C'est un problème difficile. Vous devez le faire avec AJAX et utiliser les en-têtes filesize envoyés par le navigateur au serveur dans la requête POST.

La bibliothèque de l'interface utilisateur de Yahoo a un outil pour vous aider. YUI Uploader

+0

Cette solution fonctionnerait pour moi si je peux vérifier les en-têtes de fichiers en utilisant jQuery/Javascript avant la soumission Ajax. Est-ce possible, et si oui comment? Merci. – TonE

+0

J'ai bien peur que ce ne soit pas le cas. Je pense que Flash a des capacités pour ça. Si vous pouvez vous permettre le coût de performance d'une requête de serveur aller-retour, votre script stockera les informations des en-têtes sur POST et demandera à votre JQuery de les récupérer dans un appel distinct. Je crois que c'est ainsi que fonctionne l'outil YUI. –

0

Javascript ne peut pas faire cela. Cela aurait de sérieux problèmes de sécurité. Peut-être flash peut cependant.

+1

JS can. Voir http://www.w3.org/TR/FileAPI/. Seul FF 3.6 le supporte pour l'instant (pour autant que je sache). Ce n'est pas non sécurisé, dans le sens où l'utilisateur doit sélectionner le fichier. Il est toutefois moins sécurisé, en ce sens qu'il n'a plus besoin d'appuyer sur un bouton de soumission. – Matthew

+0

Si quelque chose, cette déclaration est un acte d'accusation de Flash. –

+0

Je ne sais même pas comment je suis arrivé mais .. aujourd'hui .. c'est possible dans tous les principaux navigateurs; D – GottZ

0

Réponse courte: Non, vous devriez gérer ceci sur le serveur.

Réponse longue: Pas fiable. Avec IE, vous pouvez faire quelque chose comme:

function checkSize(filespec) { 
var fso, f, s; 
fso = new ActiveXObject("Scripting.FileSystemObject"); 
f = fso.GetFile(filespec); 
s = f.size; 
// Do something with var s 
} 

Mais cela peut facilement être comprimised par les paramètres de sécurité du navigateur ou l'utilisation d'un autre navigateur ou plate-forme.

0

Ne peut pas être fiable fait avec JavaScript pour tous les navigateurs, mais vous pouvez limiter la taille totale des données affichées dans le web.config

0

Vous n'avez vraiment pas beaucoup d'options si vous utilisez le contrôle d'entrée de fichier traditionnel. Vous ne pouvez pas le vérifier du côté client et il atteindra votre maxRequestLength configuré avant que vous ayez l'opportunité de le vérifier côté serveur. Vous pouvez attraper l'exception qui se produit lorsque le maxRequestLength est dépassé.

Questions connexes