Réponses:
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:
<form action="upload" enctype="multipart/form-data" method="post">
Upload image:
<input id="image-file" type="file" name="file" />
<input type="submit" value="Upload" />
<script type="text/javascript">
$('#image-file').bind('change', function() {
alert('This file size is: ' + this.files[0].size/1024/1024 + "MB");
});
</script>
</form>
MiB
cas si vous calculez à la base de 1024
.
Fonctionne pour l'élément de fichier dynamique et statique
Solution Javascript uniquement
function ValidateSize(file) {
var FileSize = file.files[0].size / 1024 / 1024; // in MB
if (FileSize > 2) {
alert('File size exceeds 2 MB');
// $(file).val(''); //for clearing with Jquery
} else {
}
}
<input onchange="ValidateSize(this)" type="file">
size
propriété
$(obj).files[0].size/1024/1024;
Mais changé enobj.files[0].size/1024/1024;
Non Oui, 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.
C'est assez simple.
var oFile = document.getElementById("fileUpload").files[0]; // <input type="file" id="fileUpload" accept=".jpg,.png,.gif,.jpeg"/>
if (oFile.size > 2097152) // 2 mb for bytes.
{
alert("File size must under 2mb!");
return;
}
Si vous utilisez jQuery Validation, vous pouvez écrire quelque chose comme ceci:
$.validator.addMethod(
"maxfilesize",
function (value, element) {
if (this.optional(element) || ! element.files || ! element.files[0]) {
return true;
} else {
return element.files[0].size <= 1024 * 1024 * 2;
}
},
'The file size can not exceed 2MB.'
);
J'ai fait quelque chose comme ça:
$('#image-file').on('change', function() {
var numb = $(this)[0].files[0].size/1024/1024;
numb = numb.toFixed(2);
if(numb > 2){
alert('to big, maximum is 2MB. You file size is: ' + numb +' MB');
} else {
alert('it okey, your file has ' + numb + 'MB')
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type="file" id="image-file">
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.
<Javascript>
function updateSize(elementId) {
var nBytes = 0,
oFiles = document.getElementById(elementId).files,
nFiles = oFiles.length;
for (var nFileId = 0; nFileId < nFiles; nFileId++) {
nBytes += oFiles[nFileId].size;
}
var sOutput = nBytes + " bytes";
// optional code for multiples approximation
for (var aMultiples = ["K", "M", "G", "T", "P", "E", "Z", "Y"], nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
sOutput = " (" + nApprox.toFixed(3) + aMultiples[nMultiple] + ")";
}
return sOutput;
}
</Javascript>
<HTML>
<input type="file" id="inputFileUpload" onchange="uploadFuncWithAJAX(this.value);" size="25">
</HTML>
<Javascript with XMLHttpRequest>
document.getElementById('spanFileSizeText').innerHTML=updateSize("inputFileUpload");
</XMLHttpRequest>
À votre santé
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.
<input type="file" id="fileinput" />
<script type="text/javascript">
function readSingleFile(evt) {
//Retrieve the first (and only!) File from the FileList object
var f = evt.target.files[0];
if (f) {
var r = new FileReader();
r.onload = function(e) {
var contents = e.target.result;
alert( "Got the file.n"
+"name: " + f.name + "n"
+"type: " + f.type + "n"
+"size: " + f.size + " bytesn"
+ "starts with: " + contents.substr(1, contents.indexOf("n"))
);
if(f.size > 5242880) {
alert('File size Greater then 5MB!');
}
}
r.readAsText(f);
} else {
alert("Failed to load file");
}
}
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:
<script type="text/javascript">
$('#image-file').on('change', function() {
console.log($(this)[0].files[0].name+' file size is: ' + $(this)[0].files[0].size/1024/1024 + 'Mb');
});
</script>
Vous pouvez essayer ce fineuploader
Cela fonctionne bien sous IE6 (et supérieur), Chrome ou Firefox
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»:
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
Ensuite, utilisez la méthode javascript 'size' pour obtenir la taille du fichier téléchargé:
<script type="text/javascript">
var uploadedFile = document.getElementById('imageUpload');
var fileSize = uploadedFile.files[0].size;
alert(fileSize);
</script>
Ça marche pour moi.