2012-06-25 11 views
9

Estoy trabajando en un script de carga de archivos pequeños (experiencia de aprendizaje) y noté que al seleccionar archivos relacionados con Microsoft Office (.doc o .docx por ejemplo) los objetos del archivo no tienen un tipo especificado:Determinación de tipos de contenido desconocidos con el archivo Html5 api

filelist

para archivos .doc que había esperado del tipo que sea "application/msword" ya lo largo de la misma línea de pensamiento .docx a ser "application/vnd.openxmlformats-officedocument.wordprocessingml.document".

En los casos en los que no se puede determinar el tipo de letra, ¿cuál es el curso de acción correcto para examinar la extensión del archivo y hacerla coincidir con el tipo de contenido/mime "esperado"?

guión

muestra:

<div id="fileUpload"> 
    <input type="file" id="fileElem" style="display:none;" onchange="handleFiles(this.files)"/> 
    <a href="#" id="fileSelect">Select some files</a> 
</div> 

<script type="text/javascript"> 
    var fileSelect = document.getElementById("fileSelect"), 
     fileElem = document.getElementById("fileElem"); 

    fileSelect.addEventListener("click", function (e) { 

     if (fileElem) { 
      fileElem.click(); 
     } 

     e.preventDefault(); 
    }, false); 

    function handleFiles(files) { 
     console.log(files); 
    } 

</script> 

Respuesta

12

Según la Api File W3 Proyecto del tipo attributte:

La cadena codificada en ASCII en minúsculas que representa el tipo de medio de la Blob, expresado como un tipo RFC2046 MIME [RFC2046]. Al obtener, agentes de usuario conformes DEBERÍAN devolver el tipo MIME del Blob, si se conoce . Si los agentes de usuario conformes no pueden determinar el tipo de medio de Blob, DEBEN devolver la cadena vacía. Una cadena es una válida tipo MIME si coincide con la señal de tipo de medios se define en la sección 3.7 "Medios tipos" de RFC 2616

Así que, básicamente, si no es un tipo de medio válido o de HTTP/1.1 estará vacío De todos modos.

Sí, deberías hacer algo como:

if(type === "") { 
    //Get extension and match to a MIME-types list. (http://www.htmlquick.com/es/reference/mime-types.html) 
} 
+0

esta es una lista de tipos de mime útil y mantenida api. https://github.com/stretchr/filetypes.js – netalex

+0

[Lista tipo Mime] (http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) de svn.apache.org. Ver [PHP docs comment] (http://php.net/manual/en/function.mime-content-type.php#107798) – Bright

7

de acuerdo con la respuesta aceptada, sino como un FYI a alguien (como yo) que quedó atrapado de por qué sucedía esto para unos y no a otros por tipos de archivos específicos, tenga en cuenta que en Windows, si el mime no está configurado apropiadamente en el registro de usuarios, obtendrá una cadena vacía. Fueron unas horas divertidas :)

Cuestiones relacionadas