2012-02-21 9 views
8

Si un usuario intenta arrastrar y soltar una carpeta en mi control de cargador de archivos para cargarla, entonces necesito mostrar un mensaje de error al usuario diciendo que solo se pueden subir archivos. El problema es que no pude distinguir un archivo de una carpeta.¿Cómo distinguir un archivo de una carpeta durante la carga usando arrastrar y soltar en jquery?

Una forma en que pensé que era para comprobar la propiedad del tipo de archivo de jQuery. Suponiendo que el nombre del archivo es "test.txt", el tipo de archivo devolverá "text/plain". Para un nombre de carpeta normal como "TestFolder", el tipo de archivo estaría en blanco y su tamaño de archivo sería 0. Sin embargo, si el nombre de la carpeta incluyera una extensión como "TestFolder.txt", el tipo de archivo devolvería "text/plain".

Así que podría haber verificado el tipo de archivo y el tamaño del archivo, pero no funcionaría correctamente para el nombre de la carpeta como "TestFolder.txt". ¿Podría alguien sugerirme una buena solución para arreglar esto usando jQuery u otros métodos?

+1

¿Podría especificar qué complemento "arrastrar y soltar" está utilizando? (en su caso) –

+0

Es posible que desee tomar nota también de que IE aún no tiene FileAPI, por lo que podría no darle un tamaño de archivo, probablemente solo un nombre. – index

+0

Vi esto y pensé que podría ayudarte, tenían el mismo problema: [Cómo distinguir un archivo o carpeta] (http://stackoverflow.com/questions/5893787/how-do-i-distinguish-a-file- or-a-folder-in-a-drag-and-drop-event-in-c) – JamaicanMeCrazy

Respuesta

-1

Por lo que sé, el navegador (y Javascript inherentemente) no tiene acceso a ninguna metodología de acceso a archivos por razones de seguridad, por lo que no puede verificar qué es realmente el archivo.

He trabajado con este problema yo mismo en el pasado y la mejor opción que he encontrado que funciona es manejar el archivo del servidor, y devolver el error a la página después de que se haya completado la carga.

Me gustaría ver mejores alternativas.

3

La capacidad de determinar si una carpeta se ha eliminado depende de la compatibilidad del agente de usuario con el Filesystem API. Si el agente de usuario NO admite la API del sistema de archivos (actualmente solo Chrome 21+), puede utilizar la interfaz Entry, que tiene dos interfaces secundarias: DirectoryEntry y FileEntry. La interfaz en sí tiene funciones isDirectory y isFile. Sin soporte para esta interfaz, no hay forma de determinar si los elementos descartados son carpetas al examinar el objeto DataTransfer.

0

Dado que no va a permitir que la carpeta arrastre y suelte, primero compruebe si es una carpeta o un archivo, solo en segundo lugar si no es una carpeta y luego busque la extensión del archivo. Pero IE < 11 no es compatible con la API de archivos. Espero eso ayude.

Cuestiones relacionadas