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

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

相关文章

jquery文件

jquery文件

jQuery文件获取与使用 jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、事件处理、动画和Ajax交互。以下是获取和使用jQuery文件的方法。 下载jQuery文件…

php下载文件实现

php下载文件实现

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

vue实现书籍目录

vue实现书籍目录

实现书籍目录的基本思路 使用Vue实现书籍目录需要结合组件化开发思想,通过数据驱动视图的方式动态渲染目录结构。核心在于构建树形数据结构,并通过递归组件或循环嵌套实现多级目录展示。 数据准备 典型的目…

vue预览文件实现

vue预览文件实现

实现文件预览功能 在Vue中实现文件预览功能可以通过多种方式完成,具体取决于文件类型(图片、PDF、文档等)和需求。以下是几种常见实现方法: 图片文件预览 使用HTML5的FileReader AP…

vue 实现文件地址

vue 实现文件地址

Vue 实现文件下载功能 在Vue中实现文件下载功能通常可以通过前端直接触发下载或通过后端API返回文件流。以下是几种常见方法: 前端直接下载(适用于公开URL) 对于已知的公开文件URL,可以直接…

vue实现章节目录

vue实现章节目录

实现章节目录的基本思路 在Vue中实现章节目录功能,通常需要结合数据驱动和组件化思想。核心是通过数据管理章节结构,利用递归组件或动态渲染实现目录层级展示。 数据结构设计 建议使用嵌套结构存储章节信息…