Oui, vous pouvez utiliser le File API pour cela.
Voici un exemple complet (voir les commentaires) :
document.getElementById("btnLoad").addEventListener("click", function showFileSize() {
// (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) { // This is VERY unlikely, browser support is near-universal
console.log("The file API isn't supported on this browser yet.");
return;
}
var input = document.getElementById('fileinput');
if (!input.files) { // This is VERY unlikely, browser support is near-universal
console.error("This browser doesn't seem to support the `files` property of file inputs.");
} else if (!input.files[0]) {
addPara("Please select a file before clicking 'Load'");
} else {
var file = input.files[0];
addPara("File " + file.name + " is " + file.size + " bytes in size");
}
});
function addPara(text) {
var p = document.createElement("p");
p.textContent = text;
document.body.appendChild(p);
}
body {
font-family: sans-serif;
}
Légèrement hors sujet, mais : Notez que la validation côté client n'est pas un substitut à la validation côté serveur. La validation côté client est simplement là pour rendre possible 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 pourriez utiliser la validation côté client pour vérifier que le fichier choisi par l'utilisateur ne dépasse pas 5 Mo et lui donner un message amical s'il le dépasse (pour qu'il ne passe pas tout ce temps à télécharger pour finalement voir le résultat rejeté côté serveur), mais vous devez aussi imposer cette limite côté serveur, car toutes les limites côté client (et d'autres validations) peuvent être contournées.
0 votes
Je viens de rencontrer un problème similaire en utilisant Chrome. J'ai juste fermé l'onglet et en ai ouvert un nouveau.