2010-11-24 4 views
8

Ich habe ein Import-Skript für Nur-Text-Dateien in einer Webanwendung eingerichtet.Ermitteln des Inhaltstyps einer Datei bei Verwendung der JavaScript-Schnittstelle FileReader

Mein Skript ist wie folgt:

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) 
    } 
} 

Es ist im Wesentlichen eine Modifikation des auf this question gestellt.

Im Moment kann der Benutzer jedoch technisch versuchen, eine Datei zu importieren. Da es für Nur-Text-Dateien entwickelt wurde, können Probleme auftreten, wenn ein anderer Dateityp importiert wird.

Ich habe in der Konsole festgestellt, dass der Browser den Inhaltstyp der zu importierenden Datei erkennt. Hier ist ein Beispiel.

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

Ist es möglich, dann, ein Argument zu gründen, wo das Skript des Inhaltstyp der Datei erkennt, und wenn es nicht von einer Anzahl von bestimmtem geeignetem Content-Typ ist, das Skript hat sich weigern, es zu importieren?

Vielen Dank im Voraus für eine Beratung.

+0

ich denke, die von ‚Content-Type-Erkennung‘ u bedeuten, aus der Erweiterung der Datei folgern .. –

+0

Inferenzabschnitts durch die Erweiterung wäre eine Möglichkeit, es zu tun, aber ich habe gehofft, dass ich konnte Auf alles zugreifen, was der Braue sagt ser, dass eine Datei beispielsweise "text/plain" oder "text/x-tex" oder "image/jpeg" usw. ist. –

Antwort

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

String.match ist ein RegEx, also, wenn Sie überprüfen wollen, ob die Datei jede Art von Text ist, könnten Sie das tun:

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

Der Inhaltstyp kann mit gelesen werden mit dem folgenden Code:

// 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

Eine andere Option (einfacher) ist es einfach zu überprüfen: dataURL.split (",") [0] .split (":") [1] .split (";") [0] .indexOf ([dein Mime-Typ] > = 0 – Alberto

Verwandte Themen