Определение типа содержимого файла при использовании интерфейса JavaScript FileReader - PullRequest
8 голосов
/ 24 ноября 2010

Я настраивал скрипт импорта для текстовых файлов в веб-приложении.

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

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

Это, по сути, модификация того, что поставлено на этот вопрос .

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

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

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

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

Заранее спасибо за любой совет.

Ответы [ 2 ]

14 голосов
/ 06 мая 2011
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
}
11 голосов
/ 30 января 2014

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

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