Файловая система HTML5. Как читать каталоги с помощью программы чтения каталогов?

Я загрузил каталог, используя файловый ввод и webkitdirectory, как указано ниже.

<input  id="file_input"  type="file" webkitdirectory directory  />

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

Я пробовал с приведенным ниже кодом, но безуспешно. results.length становится равным нулю. Я что-то упустил?

window.requestFileSystem(TEMPORARY, 1024*1024 /*1MB*/, function(fs) {
        var dirReader = fs.root.createReader();
        var entries = [];
        // Call the reader.readEntries() until no more results are returned.
        var readEntries = function() {
            dirReader.readEntries(function(results) {
                // If no more results are returned, we're done.
                if (!results.length) {
                    // Sort list by name of entry.
                    entries.sort(function(a, b) {
                        return a.name < b.name ? -1 :
                        b.name < a.name ? 1 : 0;
                    });
                   // listResults(entries); // Render the list.
                } else {
                    // Add in these results to the current list.
                    entries = entries.concat(toArray(results));
                    readEntries();
                }
            }, errorHandler);
        };
        readEntries(); // Start reading the directory.
    }, errorHandler);

Любая помощь приветствуется.


person Joe    schedule 19.04.2012    source источник
comment
Отметьте зеленую обведенную стрелку ответом, который вы хотите принять.   -  person Paul Draper    schedule 14.06.2013


Ответы (1)


Чтобы прочитать содержимое каталога:

fs.root.getDirectory('Documents', {}, function(dirEntry){
  var dirReader = dirEntry.createReader();
  dirReader.readEntries(function(entries) {
    for(var i = 0; i < entries.length; i++) {
      var entry = entries[i];
      if (entry.isDirectory){
        console.log('Directory: ' + entry.fullPath);
      }
      else if (entry.isFile){
        console.log('File: ' + entry.fullPath);
      }
    }

  }, errorHandler);
}, errorHandler);

В приведенном выше коде свойства isDirectory и isFile используются для получения разных выходных данных для каталогов и файлов соответственно. Кроме того, мы используем свойство fullPath, чтобы получить полный путь к записи, а не только ее имя.

Из: http://net.tutsplus.com/tutorials/html-css-techniques/toying-with-the-html5-filesystem-api/

person fdicarlo    schedule 19.04.2012
comment
Спасибо за ваш быстрый ответ. - person Joe; 19.04.2012
comment
Когда я пытаюсь использовать имя корневого каталога вместо «Документы», я получаю сообщение об ошибке FileError.NOT_FOUND_ERR. - person Joe; 19.04.2012
comment
var files = document.getElementById('mapDir').files; var filePath = файлы [0].webkitRelativePath; var rootDirName = filePath.substring(0,filePath.indexOf(/)); window.requestFileSystemTEMPORARY, 1024*1024 /*1MB*/, function(fs) { fs.root.getDirectory(rootDirName, {}, function(dirEntry){ //ваш код}, errorHandler); - person Joe; 19.04.2012
comment
Идентификатор входного файла первой строки необходимо изменить, как показано ниже: ‹br› var files = document.getElementById('file_input').files; - person Joe; 19.04.2012
comment
Используя entries[i], как я могу отправить его на сервер, используя FormData? Это тип FileEntry вместо File. Дополнительная информация stackoverflow.com/questions /65131231/ - person Samul; 03.12.2020