2011-01-03 23 views

Respuesta

31

Puede usar AJAX, realizar una solicitud HEAD e inspeccionar los encabezados de respuesta para el encabezado Content-type. Pero eso solo funciona si obtienes un archivo de un servidor HTTP.


para obtener el tipo MIME de un archivo elegido con un selector de archivos HTML, sin presentar nada, trate de:

document.getElementById('fileChooserID').files[0].type // e.g. image/png 

Ejemplo

http://jsbin.com/akati3/2

Trate de elegir una imagen, verifique el tipo MIME e intente enviarlo. Luego prueba con otra cosa que no sea una imagen.

+0

Pensé que AJAX solo funciona para archivos en un servidor – SZH

+0

Entonces, ¿quiere decir: permitir al usuario elegir un archivo en un selector de archivos, pero, sin enviar nada, determinar el tipo MIME? Editaré mi respuesta para permitir eso. –

+0

Lo siento, supongo que no expliqué lo suficiente. El usuario ingresa una url a una imagen que comienza con file: //, y la imagen se muestra en la página usando una etiqueta . Quiero saber el tipo MIME para asegurarme de que sea una imagen válida. – SZH

4

La única forma de detectar detectar un tipo mime es analizar el archivo en el lado del servidor, confirmar que es el tipo que el usuario dice que es, o que se ajusta a una lista de tipos permitidos. Aspectos a tener en cuenta:

1 - JavaScript tiene acceso limitado al sistema de archivos local, y con buena razón.

2 - No puede confiar en un tipo de mime que se haya recibido de un navegador. No necesariamente coincidirá con el tipo de mimo del archivo enviado.

3 - En una situación donde el usuario puede cargar archivos que se ajustan a una 'lista blanca' de tipos permitidos, la validación es probablemente necesaria, considerando que la aplicación puede tener que hacer algo con el archivo más allá de almacenarlos. que al menos involucraría analizar sus encabezados para información como longitud de ejecución (para un video) número de versión (para un documento de Word) y así sucesivamente.

+7

Eso es muy cierto. Un usuario semi-inteligente que quiera engañar al servidor podría falsificar el tipo MIME.El servidor siempre debe verificar dos veces el tipo de archivo a través de la magia. –

+4

+1 por 'magia': D – karim79

4

la idea NO ES confiar en el navegador ... la idea es realizar estas validaciones en el lado servidor pero, qué cosa útil si antes de enviar un archivo de 20 MB al navegador y luego ser rechazado debido a una regla en el servidor. ... por lo tanto, es una buena idea "verificar previamente" si este archivo "es un candidato" para ser cargado, la validación final se realizará en el servidor.

Cuestiones relacionadas