¿Hay alguna forma de verificar el tamaño del archivo antes de cargarlo usando JavaScript?
¿Hay alguna forma de verificar el tamaño del archivo antes de cargarlo usando JavaScript?
Sí , hay una nueva característica del W3C que es compatible con algunos navegadores modernos, la API de archivos . Puede usarse para este propósito, y es fácil probar si es compatible y recurrir (si es necesario) a otro mecanismo si no lo es.
Aquí hay 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 aquí está en acción. Pruebe eso con una versión reciente de Chrome o Firefox.
Ligeramente fuera de tema, pero: tenga en cuenta que la validación del lado del cliente no sustituye a la validación del lado del servidor. La validación del lado del cliente es puramente para hacer posible proporcionar 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 tiene más de 5 MB y darles un mensaje agradable si es (para que no se pasan todo el tiempo que la carga sólo para obtener el resultado tirado en el servidor), pero debe también cumplir ese límite en el servidor, ya que todos los límites del lado del cliente (y otros) validaciones pueden ser evitados.
Usando jquery:
fuente
MiB
si calcula a la base de1024
.Funciona para elementos de archivo dinámico y estático
Solución solo de Javascript
fuente
size
propiedad$(obj).files[0].size/1024/1024;
Pero lo cambió aobj.files[0].size/1024/1024;
NoSí, utilizando la API de archivos en los navegadores más nuevos. Ver la respuesta de TJ para más detalles.Si necesita admitir navegadores antiguos también, tendrá que usar un cargador basado en Flash como SWFUpload o Uploadify para hacer esto.
La demostración de características de SWFUpload muestra cómo funciona la
file_size_limit
configuración.Tenga en cuenta que esto (obviamente) necesita Flash, además la forma en que funciona es un poco diferente de los formularios de carga normales.
fuente
Es muy simple
fuente
Si está utilizando jQuery Validation, podría escribir algo como esto:
fuente
Hice algo así:
fuente
Utilizo una función principal de Javascript que encontré en el sitio de la red de desarrolladores de Mozilla https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications , junto con otra función con AJAX y la cambié según mis necesidades. Recibe una identificación del elemento del documento con respecto al lugar en mi código html donde quiero escribir el tamaño del archivo.
Salud
fuente
A pesar de que la pregunta fue respondida, quería publicar mi respuesta. Puede ser útil para futuros espectadores. Puede usarlo como en el siguiente código.
fuente
El ejemplo de JQuery proporcionado en este hilo estaba extremadamente desactualizado, y Google no fue de ninguna ayuda, así que aquí está mi revisión:
fuente
Puedes probar este cargador fino
Funciona bien en IE6 (y superior), Chrome o Firefox
fuente
Si configura el 'Modo de documento' en 'Estándares', puede usar el método simple 'tamaño' de javascript para obtener el tamaño del archivo cargado.
Configure el 'Modo de documento' a 'Estándares':
Luego, use el método de JavaScript 'tamaño' para obtener el tamaño del archivo cargado:
Esto funciona para mi.
fuente