实现文件选择 通过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方法递归读取。

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

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实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

uniapp 服务文件

uniapp 服务文件

uniapp 服务文件的概念 在 uniapp 中,服务文件通常指用于封装业务逻辑、接口请求或通用功能的 JavaScript 文件。这类文件通常存放在项目的 common 或 utils 目录下,便…

vue 实现文件下载

vue 实现文件下载

使用 window.open 方法 通过 window.open 直接打开文件链接触发下载,适用于已知文件 URL 的情况: window.open('文件URL', '_blank') 使用 &l…

vue实现文件管理系统

vue实现文件管理系统

Vue 文件管理系统实现方案 核心功能模块设计 文件展示组件:使用树形结构展示目录层级,配合递归组件实现无限嵌套 上传下载功能:通过axios与后端API交互,支持拖拽上传和分片上传 权限控制系统:基…

vue实现文件预览功能

vue实现文件预览功能

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

vue中实现文件导入

vue中实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合Vue的事件处理完成。创建一个文件选择按钮,监听change事件获取用户选择的文件…