2011-09-13 9 views
6

Hoy me enfrenté a algo interesante como FF File API y archivos separados por sus tipos. OK aquí hay un pequeño fragmento comoJS y type.match como tipo de archivo mime - necesito consejo

if (!input.files[0].type.match('image.*')) { 
      window.alert("Select image please"); 
      return; 
     } 

controla que la imagen sea de solo lectura. Pero, ¿qué pasa con los archivos doc y el pdf, por ejemplo? No pude encontrar ejemplos útiles para esto, así que espero que puedas compartir algunos fragmentos. Lo que me interesa es detectar diferentes tipos de archivos, pero ¿cómo puedo controlar diferentes tipos de archivos con JS y su type.match enlazado?

Here es el código base se aprecia

Cualquier comentario útil :)

+0

¿Seguro que esto funciona? El tipo de atributo se supone que es 'archivo' ¿no? Y el tipo al que se refiere es el atributo 'accept' http: //reference.sitepoint.com/html/input/accept que puede tomar cualquier valor de tipo MIME. –

+0

Sí, funciona y hace que NO se obtengan archivos, excepto imágenes. Pero quiero ver cómo hacer lo mismo para un documento o un archivo pdf? – user592704

+0

Emm ... Gracias por el enlace. el ("text/html", "image/x-rgb", o "application/java") tal vez ese sea el punto. No estoy muy seguro de que sea el atributo de aceptar archivo porque el JS está usando image. * Para su operador if :(Así que necesito su consejo, ¿qué debo mirar? – user592704

Respuesta

16

Así que la idea de base es que este código utiliza objetos de fichero, para obtener más información sobre ellos, véase:

Como se especifica por w3, el atributo type del objeto archivo es un tipo MIME. Esto se define en el RFC 2046. Pero la especificación en sí no es la parte más interesante, lo que es más interesante es la lista del tipo MIME existente here o la más utilizada here.

En este código, utilizan el atributo type y ejecutan una expresión regular (consulte match y RegExp para obtener más información). Su expresión regular dice que está bien si el tipo contiene image.

Para hacer su propio selector, deberá combinar lo anterior. (Algunos de los ejemplo, el uso === lugar de encuentro, porque el tipo MIME es todo tipo) Por ejemplo, la siguiente comprobación son posibles:

  • documento (pdf no solamente, ODT tienen este tipo, así por ejemplo,): input.files[0].type==='application/pdf'
  • de audio: input.files[0].type.match('audio.*')
  • vídeo: input.files[0].type.match('video.*')

Y así sucesivamente.

Después de eso, puede usar un selector en el atributo name del archivo si desea hacer coincidir solo cierta extensión (por ejemplo, para verificar entre diferentes tipos de documentos, podría ver si se trata de un .pdf, .odt. ..) utilizando por ejemplo input.files[0].name.match('\.pdf'). Pero eso no es aconsejable, ya que el usuario podría jugar con eso (eliminarlo o cambiarlo).

+0

Funciona como Intenté por PDF :) Gracias – user592704

+0

Excelente: agregué el 'video' a mi 'imagen existente – itsricky

+0

' imagen 'y funcionó un encanto! if (! file.type.match (/^image \ //) &&! file.type.match (/^video \ //)) {}; – itsricky

0

Esto podría ayudar:

file.mimetype.match('text.*|image.*|application.*') 

Este cheques para todos los tipos MIME aceptables

Cuestiones relacionadas