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

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

2026-01-30 17:02:28JavaScript

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

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

<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对象可获取用户选择的文件信息(名称、路径、大小等)。需注意浏览器安全限制导致路径可能为虚拟路径。

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)。

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

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

相关文章

vue实现文件的上传

vue实现文件的上传

文件上传的基本实现 在Vue中实现文件上传通常结合HTML的<input type="file">元素和FormData对象。通过监听文件选择事件获取文件对象,再通过AJAX或axios发…

vue 实现文件目录

vue 实现文件目录

Vue 实现文件目录结构 Vue 项目通常采用模块化设计,合理的目录结构有助于代码维护和团队协作。以下是常见的 Vue 项目目录结构及说明: 基础目录结构(基于 Vue CLI 生成) proje…

vue实现文件预览

vue实现文件预览

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

vue实现文件功能

vue实现文件功能

Vue 实现文件上传功能 使用 Vue 实现文件上传功能可以通过原生 HTML 的 <input type="file"> 结合 Vue 的事件处理和 HTTP 请求库(如 Axios)来…

vue实现搜索文件

vue实现搜索文件

Vue 实现搜索文件功能 在 Vue 中实现文件搜索功能,可以通过以下步骤完成。这里假设文件数据存储在本地或通过 API 获取。 数据准备 确保有一个文件列表数据,可以是静态数据或从后端 API…

vue文件树实现

vue文件树实现

Vue 文件树实现 实现文件树功能通常需要递归组件和动态数据加载。以下是一个基于 Vue 3 的完整实现方案: 数据结构设计 文件树的数据结构通常为嵌套对象数组,每个节点包含以下属性: con…