Esto es completamente posible. Use Javascript.
Uso jQuery para seleccionar el elemento de entrada. Lo tengo configurado con un evento de cambio.
$("#aFile_upload").on("change", function (e) {
var count=1;
var files = e.currentTarget.files; // puts all files into an array
// call them as such; files[0].size will get you the file size of the 0th file
for (var x in files) {
var filesize = ((files[x].size/1024)/1024).toFixed(4); // MB
if (files[x].name != "item" && typeof files[x].name != "undefined" && filesize <= 10) {
if (count > 1) {
approvedHTML += ", "+files[x].name;
}
else {
approvedHTML += files[x].name;
}
count++;
}
}
$("#approvedFiles").val(approvedHTML);
});
El código anterior guarda todos los nombres de archivo que me parecen dignos de persistir a la página de presentación, antes de la presentar efectivamente sucede. Agregué los archivos "aprobados" a val de un elemento de entrada utilizando jQuery, por lo que un formulario enviado enviará los nombres de los archivos que deseo guardar. Todos los archivos serán enviados, sin embargo, ahora en el lado del servidor, tenemos que filtrarlos. Aún no he escrito ningún código para eso, pero usa tu imaginación. Supongo que uno puede lograr esto mediante un bucle for y haciendo coincidir los nombres enviados desde el campo de entrada y hacerlos coincidir con la variable $ _FILES (PHP Superglobal, lo siento, no conozco la variable de archivo ruby).
Mi punto es que se puede hacer controles para los archivos antes de su presentación. Hago esto y luego lo entrego al usuario antes de que él/ella envíe el formulario, para que ellos sepan lo que están cargando en mi sitio. Todo lo que no cumple con los criterios no se muestra al usuario y, por lo tanto, deben saber que los archivos que son demasiado grandes no se guardarán. Esto debería funcionar en todos los navegadores porque no estoy usando el objeto FormData.
Es posible. Consulte la pregunta [this] (http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation). – sandSK