2010-11-24 17 views
8

He estado configurando un script de importación para archivos de texto sin formato en una aplicación web.Detectando el tipo de contenido de un archivo al usar la interfaz de FileReader de JavaScript

Mi script es el siguiente:

function dataImport(files) { 
    confirm("Are you sure you want to import the selected file? This will overwrite any data that is currently saved in the application workspace."); 
    for (i = 0; i < files.length; i++) { 
     file = files[i] 
     console.log(file) 
     var reader = new FileReader() 
     ret = [] 
     reader.onload = function(e) { 
      window.localStorage.setItem("ApplicationData", e.target.result); 
     } 
     reader.onerror = function(stuff) { 
      console.log("error", stuff) 
      console.log (stuff.getMessage()) 
     } 
     reader.readAsText(file) 
    } 
} 

Básicamente se trata de una modificación de la posó sobre this question.

Sin embargo, por el momento el usuario puede intentar técnicamente importar cualquier archivo. Como está diseñado para archivos de texto sin formato, pueden surgir problemas si se importa un tipo diferente de archivo.

He notado en la consola que el navegador detecta el tipo de contenido del archivo que se está importando. Aquí hay un ejemplo.

fileName: "ideas.txt" 
fileSize: 377 
name: "ideas.txt" 
size: 377 
type: "text/plain" 
webkitRelativePath: "" 

¿Es posible, entonces, para establecer un argumento en el que el script detecta el tipo de contenido del archivo, y si no es uno de una serie de tipos de contenido específicos adecuados, tienen la secuencia de comandos se niegan a importarlo?

Gracias de antemano por cualquier consejo.

+0

Creo, por 'detectar el contenido de tipo' U quiere decir, inferir de la extensión del archivo .. –

+0

inferir por la extensión sería una manera de hacerlo, pero tenía la esperanza de que pudiera acceder a lo que le diga a la frente Ser que un archivo es, por ejemplo, "text/plain" o "text/x-tex" o "image/jpeg" y así sucesivamente. –

Respuesta

14
if (file.type.match('text/plain')) { 
    // file type is text/plain 
} else { 
    // file type is not text/plain 
} 

String.match es una expresión regular, por lo que si usted quiere comprobar, si el archivo es cualquier tipo de texto, se podría hacer eso:

if (file.type.match('text.*')) { 
    // file type starts with text 
} else { 
    // file type does not start with text 
} 
10

el tipo de contenido se puede leer con el siguiente código:

// Note: File is a file object than can be read by the HTML5 FileReader API 
var reader = new FileReader(); 

reader.onload = function(event) { 
    var dataURL = event.target.result; 
    var mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0]; 
    alert(mimeType); 
}; 

reader.readAsDataURL(file); 
+0

otra opción (más simple) es simplemente verificar: dataURL.split (",") [0] .split (":") [1] .split (";") [0] .indexOf ([su tipo de mime] > = 0 – Alberto

Cuestiones relacionadas