实现文件选择 通过 HTML 的 input 元素配合 webkitdirectory 属性(非标准但主流浏览器支持)实现目录选择:…">
当前位置:首页 > JavaScript

js实现文件目录选择

2026-01-30 12:01:23JavaScript

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

通过 HTML 的 input 元素配合 webkitdirectory 属性(非标准但主流浏览器支持)实现目录选择:

<input type="file" id="dirPicker" webkitdirectory directory multiple />
<script>
  document.getElementById('dirPicker').addEventListener('change', (event) => {
    const files = event.target.files;
    console.log(files); // 文件列表(包含目录结构信息)
  });
</script>

注意

  • webkitdirectorydirectory 属性需同时声明以兼容不同浏览器。
  • multiple 允许选择多个文件(实际会包含目录下所有文件)。

使用 File System Access API(现代浏览器)

Chrome 86+ 和 Edge 支持更强大的文件系统访问 API,允许直接获取目录句柄:

async function pickDirectory() {
  try {
    const dirHandle = await window.showDirectoryPicker();
    const files = [];
    for await (const entry of dirHandle.values()) {
      files.push(entry);
    }
    console.log(files); // 包含文件/子目录的 FileSystemHandle 对象
  } catch (err) {
    console.error("用户取消选择或API不支持:", err);
  }
}

特性

  • 返回 FileSystemDirectoryHandle 对象,可递归遍历目录。
  • 需在安全上下文(HTTPS 或 localhost)中运行。

兼容性处理方案

若需兼容旧版浏览器,可降级到普通文件选择:

const isDirSupported = 'webkitdirectory' in HTMLInputElement.prototype;
const input = document.createElement('input');
input.type = 'file';
if (isDirSupported) {
  input.webkitdirectory = true;
} else {
  console.warn("浏览器不支持目录选择");
}

后端配合处理

选择目录后,通常需通过 FormData 上传文件列表:

const formData = new FormData();
Array.from(files).forEach(file => {
  formData.append('uploads[]', file, file.webkitRelativePath);
});
fetch('/upload', { method: 'POST', body: formData });

关键点

  • file.webkitRelativePath 包含文件在目录中的相对路径(如 folder/sub/file.txt)。

安全限制

  • 浏览器无法直接获取目录的本地绝对路径。
  • 用户必须主动触发文件选择(如点击事件),禁止自动弹出选择框。

js实现文件目录选择

标签: 文件目录
分享给朋友:

相关文章

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Cont…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标…

vue 实现文件目录

vue 实现文件目录

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

vue文件底层实现

vue文件底层实现

Vue 文件的底层实现 Vue 单文件组件(SFC,即 .vue 文件)的底层实现依赖于 Vue 的编译工具链,主要包括 @vue/compiler-sfc 和构建工具(如 Vite 或 Webpac…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…