实现文件选择 通过HTML原生的文件输入元素,配合webkitdirectory属性实现目录选择:
当前位置:首页 > JavaScript

js实现文件夹目录选择文件

2026-04-04 08:43:08JavaScript

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

通过HTML原生的文件输入元素,配合webkitdirectory属性实现目录选择:

<input type="file" id="directoryInput" webkitdirectory directory multiple>
<script>
  document.getElementById('directoryInput').addEventListener('change', (event) => {
    const files = event.target.files;
    for (const file of files) {
      console.log(file.webkitRelativePath); // 输出文件相对路径
    }
  });
</script>

注意:webkitdirectory为非标准属性,仅在Chrome、Edge等基于Chromium的浏览器中支持。

js实现文件夹目录选择文件

通过拖放API实现目录上传

监听拖放事件并处理DataTransferItemwebkitGetAsEntry()方法获取目录结构:

document.addEventListener('drop', (e) => {
  e.preventDefault();
  const items = e.dataTransfer.items;
  for (const item of items) {
    const entry = item.webkitGetAsEntry();
    if (entry.isDirectory) {
      readDirectory(entry);
    }
  }
});

function readDirectory(directoryEntry) {
  const reader = directoryEntry.createReader();
  reader.readEntries((entries) => {
    for (const entry of entries) {
      if (entry.isFile) {
        entry.file((file) => {
          console.log(file.name);
        });
      }
    }
  });
}

使用第三方库(如FilePond)

FilePond等库可简化目录处理流程:

js实现文件夹目录选择文件

import { FilePond } from 'filepond';
const pond = new FilePond({
  allowProcessDirectory: true,
  onaddfile: (error, file) => {
    if (error) return;
    console.log(file.filename);
  }
});

需注意浏览器兼容性,通常仍需依赖Chromium内核。

兼容性处理方案

对于不支持目录选择的浏览器(如Firefox),可降级为多文件选择:

const input = document.createElement('input');
input.type = 'file';
input.multiple = true;
input.onchange = () => {
  Array.from(input.files).forEach(file => {
    console.log(file.name);
  });
};
input.click();

注意事项

  • 目录选择功能目前主要依赖webkitdirectory,非所有浏览器支持。
  • 文件路径安全性限制可能导致webkitRelativePath返回空值。
  • 大目录处理需考虑性能问题,建议分批次读取。

以上方法可根据实际需求选择,优先推荐原生<input>方案配合拖放API增强体验。

标签: 文件夹文件
分享给朋友:

相关文章

vue实现文件预览展示

vue实现文件预览展示

Vue 实现文件预览展示的方法 使用第三方库预览常见文件类型 对于常见的文件类型(如 PDF、图片、视频等),可以使用现成的 Vue 组件库来实现预览功能。 PDF 预览:使用 vue-pdf 或…

vue实现文件导入导出

vue实现文件导入导出

Vue 文件导入 在 Vue 中实现文件导入通常通过 <input type="file"> 元素结合 FileReader API 完成。 <template> <…

vue实现打印文件流

vue实现打印文件流

Vue 实现打印文件流 在 Vue 中实现打印文件流(如 PDF、图片或其他二进制数据)通常涉及接收后端返回的文件流,将其转换为可打印的格式,并调用浏览器的打印功能。以下是具体实现方法: 接…

react如何打开文件

react如何打开文件

使用文件输入元素 在React中打开文件通常通过HTML的<input type="file">元素实现。创建一个受控组件,通过onChange事件获取用户选择的文件。 import R…

react  如何创建文件

react 如何创建文件

创建 React 文件的基本方法 在 React 项目中,创建文件通常涉及组件文件、样式文件或工具文件。以下是常见操作方式: 手动创建文件 通过文件资源管理器或 IDE(如 VSCode)在项目目录…

react如何调用打开文件

react如何调用打开文件

使用 input 元素触发文件选择 在 React 中可以通过创建一个隐藏的 input 元素并设置其 type 为 file。当用户点击自定义按钮时,通过 ref 触发该 input 的点击事件。…