2009-11-16 13 views
5

¿Alguien sabe cómo usar el atributo de aceptación en las etiquetas de entrada? Puedo verlo documentado, pero w3schools indica que no es compatible con ninguno de los principales navegadores. Las pruebas también lo confirman.¿Por qué los principales navegadores no son compatibles con el atributo HTML ACCEPT para input type = "file"?

Sé que la validación debe hacerse en el servidor, y lo estoy haciendo ahora. Pero sería bueno tener que restringir los tipos de archivos en el cuadro de diálogo de carga de archivo para la usabilidad.

Editar: Soy plenamente consciente de las implicaciones de seguridad de la validación solo del lado del cliente. No tengo la intención de eliminar la validación del lado del servidor y estoy buscando una forma de mejorar la usabilidad.

+1

Incluso si fuera compatible, eso no le evitaría validar la entrada en el lado del servidor. – Gumbo

+2

+1 por usabilidad!Esperar 40 segundos para que se cargue algo solo para que le digan que no es lo suficientemente bueno no es la mejor experiencia para el usuario. – Rob

+0

En realidad, la mayoría de los navegadores principales SON compatibles con el atributo en la medida en que filtran los tipos de archivo que se muestran en el cuadro de diálogo del selector de archivos. Sin embargo, es trivial para evitarlo al cambiar las extensiones de archivo, por lo que todavía tiene que comprobar el lado del servidor. –

Respuesta

3

La razón por la que los navegadores no implementan realmente el atributo ACCEPT es que la validación del tipo MIME es una ciencia y no tan fácil como leer una extensión de archivo. Incluso en el servidor de verificación tipo MIME puede ser difícil, ya señalado por MediaWiki:

http://www.mediawiki.org/wiki/Manual:Mime_type_detection

Aviso que intento para verificar el tipo MIME incluso del lado del servidor.

0

Apoyando esta etiqueta significaría la implementación de un camino para que el navegador para determinar el tipo MIME de un recurso local, y esto incurriría en una buena cantidad de la heurística y la posible exposición a la inyección de código y/u otras vulnerabilidades, que los navegadores ya tienen su parte justa de.

1

La razón más pedante es que no es required by la especificación HTML 4 (el énfasis es mío):

Este atributo especifica una lista separada por comas de los tipos de contenido que un servidor de procesamiento de esta forma manejará correctamente. Los agentes de usuario pueden utilizar esta información para filtrar los archivos no conformes cuando se solicita a un usuario que seleccione los archivos que se enviarán al servidor.

Es una función opcional.

Personalmente me encantaría ver esto. Cuando se le administre image/*, por ejemplo, el navegador podría mostrar la biblioteca de fotos del usuario como la ubicación predeterminada y usar íconos grandes. text/* podría ir a la carpeta de documentos, etc. Los navegadores móviles, como el iPhone, que normalmente no permiten la carga de archivos, podrían usar esto para mostrar la galería cuando el formulario está esperando una imagen. Podríamos volvernos locos y conectarnos al escáner si así lo desea. Las posibilidades son infinitas.

Sin embargo, esta característica no es de uso común, y podría ser terriblemente confuso para que los diálogos de carga de archivos funcionen de manera diferente dependiendo de lo que sea compatible con el sitio web.

Cuestiones relacionadas