DOT.файлы в JavaScript? Что это значит? - PullRequest
0 голосов
/ 28 августа 2018

В настоящее время я работаю над примером кода, найденным в сети для чтения файлов, и мне нужна некоторая помощь в расшифровке.

function readBlob(opt_startByte, opt_stopByte) {

    var files = document.getElementById('files').files;
    if (!files.length) {
        alert('Please select a file!');
        return;
    }
    //var file = files[0];
    var reader = new FileReader();
    reader.readAsText(files[0], "UTF-8");

В этой части кода я хочу узнать, как javascript интерпретирует файлы .file в файлах document.getElementById ('files'). Или как хранятся переменные файлы.

Я распечатал файлы сразу после того, как установил их, чтобы увидеть, что они печатают в консоли, и я до сих пор не понимаю, что это значит. enter image description here

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

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

При просмотре консольного журнала объекта, если он является экземпляром объекта (т. Е. Сделан из функции конструктора), у него будет имя, предшествующее его деталям. В данном случае это имя FileList. Вы можете использовать это имя в поисковом запросе для поиска информации о его структуре и других деталях.

Например, поиск "javascript FileList" одним из лучших результатов будет Документация MDN об этой структуре .

Просто это просто массивоподобный объект. Это означает, что у него есть числовые ключи свойств, которые содержат его элементы (файлы), и свойство length, указывающее количество элементов, которые оно содержит.

При этом вы должны понимать, что вы можете использовать обычный цикл for для перебора его содержимого

for(let i=0; i<files.length; i++){
  let file=files[i];
  console.log(file.name);
}

Примечание. FileList также имеет Symbol.iterator, что означает, что он может создавать свой собственный итератор. Таким образом, это означает, что вы также можете использовать цикл for ... of со структурой

for(let file of files){
  console.log(file.name);
}

Если вы хотите прочитать в каждом файле с помощью FileReader, вам нужно будет вызвать код, который вы использовали внутри цикла

for(let file of files){
    var reader = new FileReader();
    reader.onloadend = function(){
       //store data somewhere
    }
    reader.readAsText(file, "UTF-8");
}
0 голосов
/ 28 августа 2018

Объект, который живет в .files, представляет собой FileList . Это работает в основном как массив; он имеет .length, и вы можете получить доступ к элементам с помощью []. Но люди, написавшие стандарт, решили сделать его собственным особым типом объекта вместо обычного массива. Предположительно это сделано для того, чтобы вы не делали глупостей, таких как замена некоторых записей другими объектами.

Чтобы зациклить его, вы можете сделать что-то вроде:

for (var i = 0; i < files.length; i++) {
    var oneFile = files[i];
    // Do something with oneFile here
}

В каждом из файлов есть Файл , который имеет некоторые свойства, которые вы можете видеть на размещенном вами снимке экрана (name, lastModified, lastModifiedDate и т. Д.). Чтобы получить данные из каждого из них, вы можете использовать FileReader , как показано в вашем вопросе, но делать это внутри цикла на oneFile, а не в конце на files[0].

...