2009-10-22 9 views
10

J'ai une fonctionnalité de téléchargement de fichier sur l'une des pages. Je vérifie l'extension du fichier en utilisant JavaScript. Maintenant, je veux empêcher l'utilisateur de télécharger un fichier supérieur à 1 Mo. Est-il possible que je peux vérifier la taille de téléchargement de fichiers en utilisant JavaScript.Comment puis-je obtenir la taille de téléchargement d'un fichier en utilisant un simple Javascript?

Mon code regarde actuellement comme ceci:

<script language="JavaScript"> 
function validate() { 
    var filename = document.getElementById("txtChooseFile").value; 
    var ext = getExt(filename); 
    if(ext == "txt" || ext == "csv") 
     return true; 
    alert("Please upload Text files only."); 
    return false; 
} 

function getExt(filename) { 
    var dot_pos = filename.lastIndexOf("."); 
    if(dot_pos == -1) 
     return ""; 
    return filename.substr(dot_pos+1).toLowerCase(); 
} 
</script> 
+0

voir http://stackoverflow.com/questions/547292/how-to-retrieve-size-of-file – geowa4

+3

Pourquoi accepter une mauvaise réponse? Vérifiez la deuxième réponse = c'est possible! – Darren

+0

@PankajKhurana - Lorsque vous avez accepté une réponse il y a cinq ans, la réponse que vous avez choisie était correcte. Aujourd'hui ce n'est plus le cas, pourriez-vous revenir à cette question et changer la réponse acceptée à une réponse moderne s'il vous plaît? – Quentin

Répondre

3

Autre qui acquerront le nom du fichier il n'y a aucun moyen pour vous de découvrir d'autres détails sur le fichier en javascript, y compris sa taille. A la place, vous devez configurer un script côté serveur pour bloquer un téléchargement surdimensionné.

+2

De plus, même si vous le souhaitez, vous aurez besoin d'une vérification côté serveur, car rien n'empêche les utilisateurs malveillants d'écrire leur propre formulaire qui publie au même endroit. –

+6

réponse ci-dessous est correcte, c'est une réponse incorrecte –

+2

@DominicRodger Je suis d'accord que vous devez vérifier la taille du fichier sur le côté serveur pour la sécurité. Mais pour plus de commodité (ce que je pense est ce que le PO allait faire), il est préférable de faire savoir à l'utilisateur que son fichier 1 GiB ne sera pas accepté au lieu de le lui dire après avoir attendu le téléchargement du fichier. –

0

Il est peut-être possible d'utiliser beaucoup de code spécifique au navigateur. Jetez un oeil à la source de TiddlyWiki, qui parvient à se sauver sur le disque dur de l'utilisateur en se branchant dans Windows Scripting Host (IE), XPCOM (Mozilla), etc.

0

Je ne pense pas qu'il y ait moyen de faire cela avec JS plaine d'une page Web.
Avec une extension de navigateur peut-être, mais à partir d'une page javascript ne peut pas accéder au système de fichiers pour des raisons de sécurité. Flash et Java devraient avoir des restrictions similaires, mais peut-être qu'ils sont un peu moins strictes.

0

impossible. serait un problème de sécurité majeur pour permettre aux scripts côté client de s'exécuter qui peut lire les informations sur les fichiers et le disque dur des utilisateurs finaux.

+1

Ceci est pris en charge dans Firefox 3.6. Voir HTML 5 . J'ai utilisé ce module, et il fonctionne très bien pour le téléchargement via AJAX sans avoir besoin d'objets Flash ou de ruse iframe. – Matthew

+0

Désolé, le lien devrait évidemment être http://www.w3.org/TR/FileAPI/. – Matthew

27

Voir http://www.w3.org/TR/FileAPI/. Il est supporté par Firefox 3.6; Je ne connais pas d'autres navigateurs.

Dans le cas d'un onchange<input id="fileInput" type="file" /> simplement:

var fi = document.getElementById('fileInput'); 
alert(fi.files[0].size); // maybe fileSize, I forget 

Vous pouvez également retourner le contenu du fichier sous forme de chaîne, et ainsi de suite. Mais encore une fois, cela ne fonctionnera qu'avec Firefox 3.6.

0

Voir ici:

http://www.kavoir.com/2009/01/check-for-file-size-with-javascript-before-uploading.html

Comme à tous les gens qui disent cela doit être fait côté serveur, ils sont absolument parfait qu'il fait. Dans mon cas, la taille maximale sera de 128 Mo. Si un utilisateur essaie de télécharger quelque chose qui est 130 Mo, il ne devrait pas avoir à attendre le temps de téléchargement de 5 minutes pour trouver qu'il est trop grand, donc je dois faire une vérification supplémentaire avant de soumettre la page pour des raisons d'ergonomie.

2

La plupart de ces réponses sont périmées. Il est actuellement possible de déterminer la taille du fichier côté client dans n'importe quel navigateur prenant en charge l'API de fichiers. Cela inclut, à peu près, tous les navigateurs autres que IE9 et plus anciens.

5

Maintenant, il est possible d'obtenir la taille du fichier en utilisant du JavaScript pur. Presque tous les navigateurs supportent FileReader, que vous pouvez utiliser pour lire la taille du fichier ainsi que vous pouvez afficher l'image sans télécharger le fichier sur le serveur.link

code:

var oFile = document.getElementById("file-input").files[0]; // input box with type file; 
    var img = document.getElementById("imgtag"); 
    var reader = new FileReader(); 
    reader.onload = function (e) { 
      console.log(e.total); // file size 
      img.src = e.target.result; // putting file in dom without server upload. 

    }; 
    reader.readAsDataURL(oFile); 

Vous pouvez obtenir la taille du fichier directement à partir de l'objet fichier en utilisant le code suivant.

var fileSize = oFile.size; 
Questions connexes