Загрузка файла через FileAPI - PullRequest
       22

Загрузка файла через FileAPI

2 голосов
/ 26 декабря 2011

Мне нужно прочитать несколько файлов в одну функцию A. Мне нужно использовать FileAPI для этого.Но FileReader выполняет асинхронную загрузку.Могу ли я получить содержимое всех файлов в конце функции A без выхода или нет?

1 Ответ

1 голос
/ 26 декабря 2011

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

Чтобы делать то, что вы хотите, просто следите за прочитанными файлами и вызывайте обратный вызов, когда все они сделаны:

document.querySelector('[type="file"]').change = function(e) {
  handleFiles(toArray(e.target.files), function(results) {
    // results is an Array containing the FileReader results.
    alert('Done!');
  });

function toArray(list) {
  return Array.prototype.slice.call(list || [], 0);
}

function handleFiles(files, callback) {
  var results = [];

  files.forEach(function(file, i) {
    var reader = new FileReader();

    // Closure to capture the file information.
    reader.onload = function(e) {
      results.push(e.target.result);
      if (results.length == files.length) {
        callback(results);
      }
    };
    reader.readAsDataURL(file);
  });
}

Попробуйте: http://jsbin.com/epatel/3/edit#html,live

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...