实现文件选择 通过HTML原生的文件输入元素,配合webkitdirectory属性实现目录选择:
当前位置:首页 > JavaScript

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

2026-04-04 08:43:08JavaScript

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

通过HTML原生的文件输入元素,配合webkitdirectory属性实现目录选择:

<input type="file" id="directoryInput" webkitdirectory directory multiple>
<script>
  document.getElementById('directoryInput').addEventListener('change', (event) => {
    const files = event.target.files;
    for (const file of files) {
      console.log(file.webkitRelativePath); // 输出文件相对路径
    }
  });
</script>

注意:webkitdirectory为非标准属性,仅在Chrome、Edge等基于Chromium的浏览器中支持。

通过拖放API实现目录上传

监听拖放事件并处理DataTransferItemwebkitGetAsEntry()方法获取目录结构:

document.addEventListener('drop', (e) => {
  e.preventDefault();
  const items = e.dataTransfer.items;
  for (const item of items) {
    const entry = item.webkitGetAsEntry();
    if (entry.isDirectory) {
      readDirectory(entry);
    }
  }
});

function readDirectory(directoryEntry) {
  const reader = directoryEntry.createReader();
  reader.readEntries((entries) => {
    for (const entry of entries) {
      if (entry.isFile) {
        entry.file((file) => {
          console.log(file.name);
        });
      }
    }
  });
}

使用第三方库(如FilePond)

FilePond等库可简化目录处理流程:

import { FilePond } from 'filepond';
const pond = new FilePond({
  allowProcessDirectory: true,
  onaddfile: (error, file) => {
    if (error) return;
    console.log(file.filename);
  }
});

需注意浏览器兼容性,通常仍需依赖Chromium内核。

兼容性处理方案

对于不支持目录选择的浏览器(如Firefox),可降级为多文件选择:

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

const input = document.createElement('input');
input.type = 'file';
input.multiple = true;
input.onchange = () => {
  Array.from(input.files).forEach(file => {
    console.log(file.name);
  });
};
input.click();

注意事项

  • 目录选择功能目前主要依赖webkitdirectory,非所有浏览器支持。
  • 文件路径安全性限制可能导致webkitRelativePath返回空值。
  • 大目录处理需考虑性能问题,建议分批次读取。

以上方法可根据实际需求选择,优先推荐原生<input>方案配合拖放API增强体验。

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

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

如何编译react文件

如何编译react文件

编译 React 文件的方法 使用 Create React App (CRA) Create React App 是官方推荐的快速搭建 React 项目的工具,内置了 Babel 和 Webpack…

vue实现文件进度

vue实现文件进度

Vue 实现文件上传进度 使用 Vue 实现文件上传进度可以通过结合 axios 或原生 XMLHttpRequest 的进度事件来实现。以下是两种常见方法: 使用 axios 上传文件并显示进度…

vue文件下载实现方式

vue文件下载实现方式

vue文件下载实现方式 使用a标签下载 通过创建a标签并设置download属性实现文件下载。适用于已知文件URL或Blob对象的情况。 // 方法1: 直接使用URL const download…

如何启动react文件

如何启动react文件

启动 React 项目的步骤 确保已安装 Node.js 和 npm 在启动 React 项目之前,需确保系统已安装 Node.js(包含 npm)。可以通过以下命令检查是否安装成功: node -…

React如何下载csv文件

React如何下载csv文件

使用React下载CSV文件的方法 方法1:使用Blob和URL.createObjectURL 创建一个Blob对象包含CSV数据,生成下载链接并触发点击事件。 const downloa…