实现文件选择 通过HTML的
当前位置:首页 > JavaScript

js实现文件夹目录选择文件

2026-01-30 17:02:28JavaScript

使用 <input type="file"> 实现文件选择

通过HTML的<input type="file" webkitdirectory directory multiple>属性可以触发文件夹选择对话框。用户选择的文件夹及其子目录中的文件会被包含在files属性中。

js实现文件夹目录选择文件

<input id="folderInput" type="file" webkitdirectory directory multiple>
<script>
  document.getElementById('folderInput').addEventListener('change', (event) => {
    const files = event.target.files;
    console.log(files); // 文件列表(FileList对象)
  });
</script>

遍历文件列表并处理

通过FileList对象可获取用户选择的文件信息(名称、路径、大小等)。需注意浏览器安全限制导致路径可能为虚拟路径。

js实现文件夹目录选择文件

const fileList = event.target.files;
for (let i = 0; i < fileList.length; i++) {
  const file = fileList[i];
  console.log(`文件名: ${file.name}, 大小: ${file.size} bytes`);
}

使用DataTransfer API实现拖放选择

通过拖放文件夹到指定区域也能获取文件列表,需监听drop事件并检查DataTransferItemwebkitGetAsEntry方法。

const dropArea = document.getElementById('dropArea');
dropArea.addEventListener('drop', (e) => {
  e.preventDefault();
  const items = e.dataTransfer.items;
  for (let i = 0; i < items.length; i++) {
    const entry = items[i].webkitGetAsEntry();
    if (entry.isDirectory) {
      readDirectory(entry);
    }
  }
});

递归读取目录内容

若需深度遍历子目录,可通过FileSystemDirectoryEntrycreateReader方法递归读取。

function readDirectory(directoryEntry) {
  const reader = directoryEntry.createReader();
  reader.readEntries((entries) => {
    entries.forEach(entry => {
      if (entry.isFile) {
        entry.file(file => console.log(file.name));
      } else if (entry.isDirectory) {
        readDirectory(entry); // 递归处理子目录
      }
    });
  });
}

浏览器兼容性说明

  • webkitdirectory属性仅在Chrome、Edge、Opera等基于Chromium的浏览器中支持。
  • Firefox部分版本需启用dom.webkit.enabled配置。
  • Safari对目录选择的支持有限。

安全限制与替代方案

  • 浏览器不会暴露真实文件路径,仅提供文件名和内容。
  • 如需更复杂功能(如持久化访问),可考虑Electron或Chrome扩展API(如chrome.fileSystem)。

标签: 文件夹文件
分享给朋友:

相关文章

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

vue实现文件预览

vue实现文件预览

Vue 实现文件预览的方法 文件预览功能通常涉及图片、PDF、Office文档等多种格式的处理。以下是几种常见文件类型的实现方案: 图片预览 使用 <input type="file">…

vue实现文件预览功能

vue实现文件预览功能

实现文件预览功能的方法 在Vue中实现文件预览功能可以通过多种方式完成,具体取决于文件类型和需求。以下是几种常见的实现方法: 图片预览 对于图片文件,可以使用HTML5的FileReader API…

vue实现文件拖拽下载

vue实现文件拖拽下载

Vue 实现文件拖拽下载 在 Vue 中实现文件拖拽下载功能,可以通过监听拖拽事件、处理文件数据并触发下载逻辑完成。以下是具体实现方法: 拖拽区域设置 创建一个可拖拽的区域,通常是一个 <di…

vue文件下载怎么实现

vue文件下载怎么实现

使用 <a> 标签下载文件 在 Vue 中可以通过动态生成 <a> 标签实现文件下载。创建一个隐藏的 <a> 标签,设置 href 为文件 URL 并添加 down…

vue实现word文件预览

vue实现word文件预览

vue实现word文件预览的方法 在Vue项目中实现Word文件预览,可以通过以下几种方式: 使用mammoth.js库 mammoth.js是一个将.docx文件转换为HTML的JavaScrip…