Recientemente he contribuido con algunos códigos a Moodle que usa algunas de las capacidades de HTML5 para permitir que los archivos se carguen en formularios mediante arrastrar y soltar desde el escritorio (la parte central del código es aquí: https://github.com/moodle/moodle/blob/master/lib/form/dndupload.js para referencia).Detectando carpetas/directorios en objetos Javascript FileList
Esto está funcionando bien, a excepción de cuando un usuario arrastra un carpeta/directorio lugar de un archivo real. La basura luego se carga en el servidor, pero con el nombre de archivo que coincide con la carpeta.
Lo que estoy buscando es una manera fácil y confiable para detectar la presencia de una carpeta en el objeto listaDeArchivos, por lo que puede saltar (y probablemente devolverá un mensaje de error también amable).
He revisado la documentación en MDN, así como una búsqueda web más general, pero no encontré nada. También he examinado los datos en las herramientas de desarrollo de Chrome y parece que el 'tipo' del objeto Archivo se establece sistemáticamente en "" para las carpetas. Sin embargo, no estoy del todo convencido de que este sea el método de detección más confiable entre navegadores.
¿Alguien tiene alguna sugerencia mejor?
Gracias por la sugerencia - Me preguntaba si rechazar los archivos de tamaño cero sería un buen punto de partida (este parece ser el tamaño de las carpetas en Windows) y luego usar FileReader para verificar si el contenido es \ 0 cuando File.size % 4096 es cero – davosmith
Absolutamente. El descubrimiento más sorprendente para mí fue que el tamaño no era consistentemente 0 para las carpetas. La cosa '% 4096' es interesante. Ciertamente, se necesita más investigación. Me gusta, ¿es universal 4096 o es específico para Windows 7 de 64 bits? – gilly3
Impar: obtuve el tamaño 0 de forma consistente con Win 7 (64 bits) (lo verificaré dos veces, pero lo intenté con Chrome/Firefox). Sin embargo, obtuve 4.096 bytes (exactamente) con Ubuntu 11.10 (64 bits) (nuevamente con Chrome/Firefox). – davosmith