实现文件选择 通过 HTML 原生文件输入框实现单个或多个文件选择,支持目录选择(需添加 webkitdirectory 属性):…">
当前位置:首页 > JavaScript

js实现文件目录选择

2026-03-01 03:09:47JavaScript

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

通过 HTML 原生文件输入框实现单个或多个文件选择,支持目录选择(需添加 webkitdirectory 属性):

js实现文件目录选择

<input type="file" id="fileInput" webkitdirectory multiple />
<script>
  document.getElementById('fileInput').addEventListener('change', (event) => {
    const files = event.target.files;
    console.log('Selected files:', files);
  });
</script>
  • webkitdirectory: 允许选择目录(仅限 Chrome/Edge 等基于 Chromium 的浏览器)。
  • multiple: 允许多选文件或目录内容。

使用 showDirectoryPicker() API(现代浏览器)

通过 File System Access API 实现更灵活的目录选择(需用户主动触发,如点击事件):

js实现文件目录选择

async function pickDirectory() {
  try {
    const dirHandle = await window.showDirectoryPicker();
    const files = [];
    for await (const entry of dirHandle.values()) {
      if (entry.kind === 'file') {
        files.push(entry.name);
      }
    }
    console.log('Directory contents:', files);
  } catch (err) {
    console.error('User cancelled or API not supported:', err);
  }
}
  • 仅支持 HTTPS 或本地开发环境。
  • 返回的是文件句柄(FileSystemHandle),需进一步处理获取文件内容。

通过拖放(Drag & Drop)实现

监听拖放事件获取目录中的文件列表:

<div id="dropZone">拖放目录或文件到此处</div>
<script>
  const dropZone = document.getElementById('dropZone');
  dropZone.addEventListener('drop', (e) => {
    e.preventDefault();
    const items = e.dataTransfer.items;
    const files = [];
    for (let i = 0; i < items.length; i++) {
      if (items[i].webkitGetAsEntry()?.isDirectory) {
        console.log('Directory dropped (limited access)');
      } else {
        files.push(items[i].getAsFile());
      }
    }
    console.log('Dropped files:', files);
  });
  dropZone.addEventListener('dragover', (e) => e.preventDefault());
</script>
  • 拖放目录时可能无法直接访问内部文件(浏览器限制)。

兼容性说明

  • webkitdirectoryshowDirectoryPicker() 在 Firefox 中不支持。
  • 生产环境建议检测 API 支持情况并提供备选方案(如传统文件上传)。

完整示例可参考 MDN 文档

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

相关文章

vue实现文件模板展示

vue实现文件模板展示

Vue 实现文件模板展示的方法 在 Vue 中实现文件模板展示通常涉及文件上传、预览和模板渲染等功能。以下是几种常见的实现方式。 使用文件上传组件 通过 Vue 的文件上传组件(如 el-uploa…

uniapp 目录

uniapp 目录

uniapp 目录结构 uniapp 的目录结构遵循 Vue.js 项目的规范,同时包含一些特有的文件和目录。以下是典型的 uniapp 项目目录结构及其说明: project-name/ ├──…

vue文件下载实现

vue文件下载实现

使用 Blob 对象下载文件 在 Vue 中可以通过创建 Blob 对象实现文件下载。通过将后端返回的二进制数据转换为 Blob,再生成下载链接触发浏览器下载行为。 axios.get('/api/…

vue实现文件预览

vue实现文件预览

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

css 制作目录

css 制作目录

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

js实现文件的上传

js实现文件的上传

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。HTML部分需要包含一个文件选择控件和一个提交按…