javascript - 如何从文件夹中读取文件

标签 javascript webkit fileapi

找到这篇文章,展示了如何区分文件上传和目录 How to handle dropped folders但他们没有解释我如何处理目录上传。很难找到任何例子。任何人都知道如何获取目录中每个文件的 File 实例?

从那篇文章复制:

<div id=”dropzone”></div>


var dropzone = document.getElementById('dropzone');
dropzone.ondrop = function(e) {
  var length = e.dataTransfer.items.length;
  for (var i = 0; i < length; i++) {
    var entry = e.dataTransfer.items[i].webkitGetAsEntry();
    if (entry.isFile) {
      ... // do whatever you want
    } else if (entry.isDirectory) {
      ... // do whatever you want
    }
  }
};

最佳答案

使用DirectoryReader directoryEntry.createReader() , readEntries()对于文件夹或,FileEntry file()用于单个或多个文件放置。

html

<div id="dropzone" 
     ondragenter="event.stopPropagation(); event.preventDefault();" 
     ondragover="event.stopPropagation(); event.preventDefault();" 
     ondrop="event.stopPropagation(); event.preventDefault(); handleDrop(event);">
    Drop files
</div>

JavaScript

function handleFiles(file) {
  console.log(file);
  // do stuff with `File` having `type` including `image`
  if (/image/.test(file.type)) {
    var img = new Image;
    img.onload = function() {
      var figure = document.createElement("figure");
      var figcaption = document.createElement("figcaption");
      figcaption.innerHTML = file.name;
      figure.appendChild(figcaption);
      figure.appendChild(this);
      document.body.appendChild(figure);
      URL.revokeObjectURL(url);
    }
    var url = URL.createObjectURL(file);
    img.src = url;
  } else {
    console.log(file.type)
  }
}

function handleDrop(event) {
  var dt = event.dataTransfer;
  var files = dt.files;
  var length = event.dataTransfer.items.length;
  for (var i = 0; i < length; i++) {
    var entry = dt.items[i].webkitGetAsEntry();
    if (entry.isFile) {
      // do whatever you want
      console.log("isFile", entry.isFile);
      entry.file(handleFiles);
    } else if (entry.isDirectory) {
      // do whatever you want
      console.log("isDirectory", entry.isDirectory);
      var reader = entry.createReader();
      reader.readEntries(function(entries) {
        entries.forEach(function(dir, key) {
          dir.file(handleFiles);
        })
      })
    }
  }
}

plnkr http://plnkr.co/edit/eGAnbA?p=preview

关于javascript - 如何从文件夹中读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826601/

相关文章:

javascript - XSS黑名单/白名单

javascript - 是否有支持 @augments 等的 JavaScript IDE?

javascript - polymer 中的 Firebase 共享身份验证

jquery - Fancybox jQuery 中的 CSS 渐变?

css - 什么列轴 : vertical; does?

google-chrome-extension - Google Chrome扩展程序-如何访问和存储本地文件以供以后使用

javascript - 刷新指令中的值

javascript - 带 Angular 罗盘旋转 javascript 问题 - 旋转/平移

javascript - 如何在通过 XMLHttpRequest 上传文件时获得进度

javascript - 通过 FileAPI 上传文件