实现文件选择 通过HTML的
当前位置:首页 > JavaScript

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

2026-01-30 17:02:28JavaScript

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

通过HTML的<input type="file" webkitdirectory directory multiple>属性可以触发文件夹选择对话框。用户选择的文件夹及其子目录中的文件会被包含在files属性中。

<input id="folderInput" type="file" webkitdirectory directory multiple>
<script>
  document.getElementById('folderInput').addEventListener('change', (event) => {
    const files = event.target.files;
    console.log(files); // 文件列表(FileList对象)
  });
</script>

遍历文件列表并处理

通过FileList对象可获取用户选择的文件信息(名称、路径、大小等)。需注意浏览器安全限制导致路径可能为虚拟路径。

const fileList = event.target.files;
for (let i = 0; i < fileList.length; i++) {
  const file = fileList[i];
  console.log(`文件名: ${file.name}, 大小: ${file.size} bytes`);
}

使用DataTransfer API实现拖放选择

通过拖放文件夹到指定区域也能获取文件列表,需监听drop事件并检查DataTransferItemwebkitGetAsEntry方法。

const dropArea = document.getElementById('dropArea');
dropArea.addEventListener('drop', (e) => {
  e.preventDefault();
  const items = e.dataTransfer.items;
  for (let i = 0; i < items.length; i++) {
    const entry = items[i].webkitGetAsEntry();
    if (entry.isDirectory) {
      readDirectory(entry);
    }
  }
});

递归读取目录内容

若需深度遍历子目录,可通过FileSystemDirectoryEntrycreateReader方法递归读取。

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

function readDirectory(directoryEntry) {
  const reader = directoryEntry.createReader();
  reader.readEntries((entries) => {
    entries.forEach(entry => {
      if (entry.isFile) {
        entry.file(file => console.log(file.name));
      } else if (entry.isDirectory) {
        readDirectory(entry); // 递归处理子目录
      }
    });
  });
}

浏览器兼容性说明

  • webkitdirectory属性仅在Chrome、Edge、Opera等基于Chromium的浏览器中支持。
  • Firefox部分版本需启用dom.webkit.enabled配置。
  • Safari对目录选择的支持有限。

安全限制与替代方案

  • 浏览器不会暴露真实文件路径,仅提供文件名和内容。
  • 如需更复杂功能(如持久化访问),可考虑Electron或Chrome扩展API(如chrome.fileSystem)。

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

相关文章

vue实现文件预览展示

vue实现文件预览展示

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

vue文件下载实现

vue文件下载实现

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

js实现文件的上传

js实现文件的上传

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

vue前端实现文件下载

vue前端实现文件下载

使用 window.open 直接下载 通过 window.open 直接打开文件链接触发下载,适用于简单的文件下载场景。 将文件 URL 作为参数传入,浏览器会自动处理下载行为: window.o…

vue实现文件预览功能

vue实现文件预览功能

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

vue axios实现文件下载

vue axios实现文件下载

使用 Axios 实现文件下载 在 Vue 项目中,可以通过 Axios 发送请求实现文件下载功能。以下是具体实现方法: 发送 GET 请求下载文件 axios({ method: 'get',…