2010-11-24 1 views
8

Я настраивал сценарий импорта для текстовых файлов в веб-приложении.Обнаружение типа содержимого файла при использовании интерфейса FileReader JavaScript

Мой сценарий выглядит следующим образом:

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

Это по существу является модификацией, которая позировала на this question.

Однако на данный момент пользователь может технически попытаться импортировать любой файл. Поскольку он предназначен для файлов с обычным текстом, проблемы могут возникать, если импортируется другой тип файла.

Я заметил в консоли, что браузер определяет тип содержимого импортируемого файла. Вот пример.

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

Можно, затем, чтобы создать аргумент, где скрипт определяет тип содержимого файла, и если это не один из ряда заданных подходящих типов содержимого, есть сценарий отказаться от импорта?

Заранее благодарим за любые советы.

+0

Я думаю, с помощью «обнаружить тип содержимого» и означает, выводя из расширения файла .. – 2010-11-24 07:25:10

+0

выведения расширения будет один из способов сделать это, но я надеялся, что я мог бы доступ ко всему, что подсказывает лоб ser, что файл, например, «text/plain» или «text/x-tex» или «image/jpeg» и т. д. – 2010-11-24 08:20:37

ответ

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

String.match является RegEx, так что если вы хотите, чтобы проверить, является ли файл любого типа текста, вы можете сделать это:

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

Тип контента можно читать с следующий код:

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