Existe-t-il un moyen de vérifier la taille du fichier avant de le télécharger à l'aide de JavaScript?
Existe-t-il un moyen de vérifier la taille du fichier avant de le télécharger à l'aide de JavaScript?
Oui , il existe une nouvelle fonctionnalité du W3C prise en charge par certains navigateurs modernes, l' API File . Il peut être utilisé à cette fin, et il est facile de tester s'il est pris en charge et de retomber (si nécessaire) sur un autre mécanisme s'il ne l'est pas.
Voici un exemple complet:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Show File Data</title>
<style type='text/css'>
body {
font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function showFileSize() {
var input, file;
// (Can't use `typeof FileReader === "function"` because apparently
// it comes back as "object" on some browsers. So just see if it's there
// at all.)
if (!window.FileReader) {
bodyAppend("p", "The file API isn't supported on this browser yet.");
return;
}
input = document.getElementById('fileinput');
if (!input) {
bodyAppend("p", "Um, couldn't find the fileinput element.");
}
else if (!input.files) {
bodyAppend("p", "This browser doesn't seem to support the `files` property of file inputs.");
}
else if (!input.files[0]) {
bodyAppend("p", "Please select a file before clicking 'Load'");
}
else {
file = input.files[0];
bodyAppend("p", "File " + file.name + " is " + file.size + " bytes in size");
}
}
function bodyAppend(tagName, innerHTML) {
var elm;
elm = document.createElement(tagName);
elm.innerHTML = innerHTML;
document.body.appendChild(elm);
}
</script>
</head>
<body>
<form action='#' onsubmit="return false;">
<input type='file' id='fileinput'>
<input type='button' id='btnLoad' value='Load' onclick='showFileSize();'>
</form>
</body>
</html>
Et le voici en action. Essayez cela avec une version récente de Chrome ou Firefox.
Légèrement hors sujet, mais: Notez que la validation côté client ne remplace pas la validation côté serveur. La validation côté client vise uniquement à permettre une meilleure expérience utilisateur. Par exemple, si vous n'autorisez pas le téléchargement d'un fichier de plus de 5 Mo, vous pouvez utiliser la validation côté client pour vérifier que le fichier que l'utilisateur a choisi ne dépasse pas 5 Mo et lui donner un joli message convivial s'il l'est. (ils ne passent donc pas tout ce temps à télécharger uniquement pour obtenir le résultat sur le serveur), mais vous devez également appliquer cette limite au serveur, car toutes les limites côté client (et autres validations) peuvent être contournées.
Utilisation de jquery:
la source
MiB
cas si vous calculez à la base de1024
.Fonctionne pour l'élément de fichier dynamique et statique
Solution Javascript uniquement
la source
size
propriété$(obj).files[0].size/1024/1024;
Mais changé enobj.files[0].size/1024/1024;
NonOui, en utilisant l'API File dans les navigateurs plus récents. Voir la réponse de TJ pour plus de détails.Si vous devez également prendre en charge les navigateurs plus anciens, vous devrez utiliser un programme de téléchargement Flash tel que SWFUpload ou Uploadify pour ce faire.
La démonstration des fonctionnalités de SWFUpload montre comment le
file_size_limit
paramètre fonctionne.Notez que cela (évidemment) a besoin de Flash, plus la façon dont cela fonctionne est un peu différente des formulaires de téléchargement normaux.
la source
C'est assez simple.
la source
Si vous utilisez jQuery Validation, vous pouvez écrire quelque chose comme ceci:
la source
J'ai fait quelque chose comme ça:
la source
J'utilise une fonction Javascript principale que j'avais trouvée sur le site Mozilla Developer Network https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications , ainsi qu'une autre fonction avec AJAX et modifiée en fonction de mes besoins. Il reçoit un identifiant d'élément de document concernant l'endroit dans mon code html où je veux écrire la taille du fichier.
À votre santé
la source
Même si la question est répondue, je voulais poster ma réponse. Pourrait être utile aux futurs téléspectateurs.Vous pouvez l'utiliser comme dans le code suivant.
la source
L'exemple JQuery fourni dans ce fil était extrêmement obsolète, et google n'était pas du tout utile alors voici ma révision:
la source
Vous pouvez essayer ce fineuploader
Cela fonctionne bien sous IE6 (et supérieur), Chrome ou Firefox
la source
Si vous définissez le «Mode Document» sur «Standards», vous pouvez utiliser la méthode simple «taille» javascript pour obtenir la taille du fichier téléchargé.
Réglez le «Mode document» sur «Normes»:
Ensuite, utilisez la méthode javascript 'size' pour obtenir la taille du fichier téléchargé:
Ça marche pour moi.
la source