实现文件选择 通过 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 实现更灵活的目录选择(需用户主动触发,如点击事件):

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 文档

js实现文件目录选择

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

相关文章

vue实现文件下载

vue实现文件下载

使用 Blob 对象和 URL.createObjectURL 通过创建 Blob 对象生成文件内容,利用 URL.createObjectURL 生成临时链接,再通过动态创建 <a> 标…

vue实现文件的上传

vue实现文件的上传

文件上传的基本实现 在Vue中实现文件上传通常结合HTML的<input type="file">元素和FormData对象。通过监听文件选择事件获取文件对象,再通过AJAX或axios发…

vue实现录音文件播放

vue实现录音文件播放

实现录音文件播放的方法 在Vue中实现录音文件播放需要结合HTML5的Web Audio API或第三方库。以下是两种常见的方法: 使用HTML5 Audio元素 通过Vue动态绑定<a…

uniapp 目录

uniapp 目录

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

vue实现树目录

vue实现树目录

vue实现树目录的方法 递归组件实现树形结构 使用递归组件是Vue中实现树形目录的常见方法。通过组件调用自身,可以处理任意层级的嵌套数据。 <template> <div>…

js实现目录

js实现目录

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