[SOLUCIONADO]Validar tamaño de un archivo, antes de subirlo

Buenas Noches,
Tengo el problema para validar que el usuario NO se pase de 5 megas, la validación es en el servidor por lo tanto si elige uno muy grande de todas formas se empieza el proceso de descarga, lo cual me bloquea el proceso y al final de la espera me toca reiniciar la aplicación.

$tamanyo_maximo = 5*(1024*1024);
if ($datos[‘archivo’][‘size’] <= $tamanyo_maximo) move_uploaded_file($datos[‘archivo’][‘tmp_name’], $ruta)

Alguien tiene la validación para comprobar el tamaño del archivo antes de que se inicie el proceso de descarga ? busque bastante por internet, pero NO encuentro.

Mil gracias

Hola Jhon,

supongo que te referis a la subida de archivos, en particular me parece raro que no hayas encontrado info al respecto, hay mucha… te paso unos links:

http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation
http://www.kavoir.com/2009/01/check-for-file-size-with-javascript-before-uploading.html

Del lado del servidor podes manipular el tamaño via la modificacion de la directiva en php.ini, digo… para no hacer la cuenta, ya que de todas maneras va a tomar preponderancia el seteo en la configuracion.

Saludos

Richard, tendrías el detalle de revisarme esta extensión del formulario de descarga, ya que NO me toma las propiedades de ef_upload, o algún detalle que me falta para validar el tamaño del archivo de descarga antes de subirlo al servidor ?

<?php class extension_descarga extends toba_ei_formulario { function extender_objeto_js() { echo " {$this->objeto_js}.evt__archivo__procesar = function(es_inicial) { if (! es_inicial) { var ef = this.ef('archivo'); var uploadedFile = document.getElementById('ef'); var fileSize = uploadedFile.files[0].size; if (fileSize < (1024 * 1024 * 2)) alert ('No superar los 2Mb'); } } "; } } ?>

Como siempre mil gracias por orientarnos

Hola Jhon,

en lugar de hacer esto:


var ef = this.ef('archivo');
var uploadedFile = document.getElementById('ef');

que no va a funcionar porque this.ef() te da una referencia a un objeto toba… podes hacer lo siguiente:


var ef = this.ef('archivo').get_input();

que te da la referencia al tag html.

Saludos

Ingeniero, gracias por responder, el get_input () NO se encuentra dentro de las utilidades de toba, por lo tanto está input,
la probamos igualmente con este y al pasar por dicha línea sale con valor null, es decir que NO coge las propiedades, para sacar el size

var uploadedFile = document.getElementById(‘ef’);
alert (uploadedFile);

En algún aparte de lo que se ha buscado en internet aparece una línea que NO la intermpretamos si se requiere, si es así que puede ser por esto que no funciona, en donde la agregaríamos ?
“”;

De nuevo mil gracias.

Tenes razon Jhon, en JS el metodo se llama input()… no get_input()… me equivoque.

la probamos igualmente con este y al pasar por dicha línea sale con valor null, es decir que NO coge las propiedades, para sacar el size

que raro, dicho metodo se utiliza internamente en la API JS para hacer referencia al elemento… de hecho el metodo hace un “getElementById”.

var uploadedFile = document.getElementById('ef'); alert (uploadedFile);
Esto asi no va a funcionar nunca... salvo que el elemento HTML para subir el archivo tenga como id justamente 'ef'... si es un campo de toba, el identificador es por mucho mas complejo, por eso te recomendaba que utilizaras el metodo input().
En algún aparte de lo que se ha buscado en internet aparece una línea que NO la intermpretamos si se requiere, si es así que puede ser por esto que no funciona, en donde la agregaríamos ? "";

Segun esto dicha linea segun entiendo brinda la capacidad de decirle especificamente a IE como se quiere renderizar la pagina. No creo que tenga mucho que ver en este caso.

Saludos

Richard, el que sabe sabe y el que no sabe es como el que no vé.
Esta última aclaración fué clave para la solución, como el input ya tenía el getElementById, en la línea siguiente se repetía, por lo tanto se duplicaba y se perdía el efecto.

Ya puedo lograr el size, y procedo a validar en el cliente,

Mil gracias