¿Hay alguna manera de comprobar el tamaño de archivo de antes de subirlo utilizando JavaScript?archivo JavaScript carga
Respuesta
Sí, hay una nueva característica del W3C que es compatible con algunos navegadores modernos, el File API. Se puede usar para este propósito, y es fácil probar si es compatible y retroceder (si es necesario) a otro mecanismo si no es así.
Aquí está un ejemplo completo:
<!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>
Y here que está en acción. Pruébalo con una versión reciente de Chrome o Firefox.
poco fuera de tema, pero: Tenga en cuenta que la validación del lado del cliente es hay sustituto para la validación del lado del servidor. La validación del lado del cliente es puramente para permitir una mejor experiencia de usuario. Por ejemplo, si no permite cargar un archivo de más de 5 MB, puede usar la validación del lado del cliente para verificar que el archivo que el usuario ha elegido no tenga más de 5 MB de tamaño y darles un mensaje amigable si es (por lo que no gastan todo ese tiempo la posibilidad de subir sólo para obtener el resultado tirado en el servidor), pero hay que también cumplir ese límite en el servidor, ya que todos los límites del lado del cliente (y otras validaciones) pueden ser eludidas .
Sin
Sí, utilizando la API de archivos en los nuevos navegadores. Ver la respuesta de TJ para más detalles.
Si necesita admitir navegadores más antiguos también, tendrá que usar un cargador basado en Flash como SWFUpload o Uploadify para hacerlo.
El SWFUpload Features Demo muestra cómo funciona la configuración file_size_limit
.
Tenga en cuenta que esto (obviamente) necesita Flash, además de la forma en que funciona es un poco diferente de las formas de carga normales.
Puede probar este fineuploader
Funciona bien bajo IE6 (y avove), Chrome o Firefox
Fine Uploader no puede validar el tamaño de archivo en IE9 y versiones anteriores, ya que no es compatible con File API no es compatible. IE10 es la primera versión de Internet Explorer que admite File API. –
usando 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>
Si estás usando jQuery Validación, usted podría escriba algo como esto:
$.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.'
);
Utilizo una función principal de Javascript que encontré en el sitio Mozilla Developer Network https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications, junto con otra función con AJAX y que cambié según mis necesidades. Recibe una identificación de elemento de documento con respecto al lugar en mi código html donde quiero escribir el tamaño del archivo.
<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>
Saludos
Si se establece el IE Modo Documento "a 'normas' se puede utilizar el método simple javascript 'tamaño' para obtener el tamaño del archivo subido.
Ajuste el Ie 'Modo de documento' a 'Estándares':
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
Than, utilice el 'tamaño' javascript método para conseguir tamaño del archivo subido:
<script type="text/javascript">
var uploadedFile = document.getElementById('imageUpload');
var fileSize = uploadedFile.files[0].size;
alert(fileSize);
</script>
Funciona para mí .
Esto no funcionará en IE9 o anterior, sin importar las metaetiquetas que agregue. –
Es bastante 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;
}
Aunque la pregunta es respondida, quería publicar mi respuesta. Puede ser útil para los futuros espectadores. Puede usarlo como en el siguiente código.
<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");
}
}
Obras para Dinámico y elemento de archivo estático (El método FileSize es una característica no estándar y en desuso desde Gecko 7.0.)
Javascript única solución
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">
El método FileSize es una característica no estándar y obsoleto desde Gecko 7.0. https://developer.mozilla.org/en-US/docs/Web/API/File/fileSize – MissRaphie
Nice Answer. Estaba teniendo el mismo problema pero tu solución funcionó para mí :) –
JQuery ex amplia proporcionada en este hilo era muy anticuado, y Google no era servicial en todo lo que aquí es mi revisión:
<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>
- 1. evento para carga de archivo cancelar en javascript
- 2. diálogo de carga del archivo de desencadenamiento usando javascript/jquery
- 3. carga en javascript de texto
- 4. Carga de archivo Ajax
- 5. Javascript en ipad carga lento
- 6. Javascript antes de la carga?
- 7. Javascript carga background-image asynchrously
- 8. carga jQuery en otro archivo js
- 9. archivo barra de progreso de carga
- 10. Cargando Javascript: Solicitudes HTTP -v- Carga asincrónica
- 11. Carga de archivo con Tornado
- 12. problema de carga de archivo
- 13. Carga de archivo JSF 2.0
- 14. Carga de archivo devuelve nulo
- 15. LESS archivo no carga (404)
- 16. ConfigurationManager.OpenExeConfiguration - carga el archivo incorrecto?
- 17. Symfony2: Editar carga de archivo
- 18. carga Django archivo JSON locales
- 19. FTPClient - Java, archivo de carga
- 20. carga del archivo codeigniter - ¿opcional?
- 21. Javascript: cargando un archivo ... sin un archivo
- 22. Comprobando si jquery se carga usando Javascript
- 23. JavaScript setTimeout() se ralentiza bajo mucha carga
- 24. Carga diferida de imágenes con degradación (JavaScript)
- 25. Javascript Imagen Objeto - Manejar proceso de carga
- 26. Javascript: multi-navegador de archivos sin servidor carga y descarga
- 27. ¿Cómo puedo obtener el tamaño de carga de un archivo usando Javascript simple?
- 28. Recuperación de nombres de archivo de un control de carga de archivos múltiples con javascript
- 29. ¿Hay una biblioteca de soporte de Javascript para la API y la carga del archivo html5?
- 30. Borrado de un campo de carga de archivo HTML mediante JavaScript
+1 para los "todos los límites del lado del cliente (y otras validaciones) se puede evitar". Esto es tan cierto para las aplicaciones frontend de base de datos "nativas"/"compiladas". Y no coloque las contraseñas de acceso a la base de datos en su código compilado, ni siquiera "encriptado" (con una contraseña que también está en el código, simplemente lo vi recientemente). – masterxilo