实现文件选择 通过 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 });

关键点

js实现文件目录选择

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

安全限制

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

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

相关文章

php实现文件下载

php实现文件下载

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

实现.vue文件

实现.vue文件

创建Vue单文件组件 Vue单文件组件(.vue文件)是Vue.js框架的核心特性之一,它将模板、脚本和样式封装在一个文件中。一个典型的.vue文件结构包含三个部分:<template>、…

如何编译java文件

如何编译java文件

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

php实现文件下载代码

php实现文件下载代码

实现文件下载的基本方法 使用PHP实现文件下载的核心是通过设置HTTP头部信息,强制浏览器触发下载行为而非直接显示文件内容。 $file_path = 'path/to/your/file.ext'…

css 制作目录

css 制作目录

使用CSS制作目录的方法 CSS可以用于创建美观且结构清晰的目录,以下是几种常见的方法: 使用无序列表(ul)和样式化 通过无序列表创建目录结构,再利用CSS进行美化: <div class…

vue实现文件导入

vue实现文件导入

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