代码 JavaScript 实现访问本地文件夹

2024-11-18 23:12:47 +0800 CST views 980

JavaScript 实现访问本地文件夹

首先分享一个 GitHub 的小知识:在 GitHub 域名后加上 1s,即可打开一个 VSCode 窗口来阅读代码。

接下来,介绍如何用 JavaScript 实现访问本地文件夹的功能。考虑到用户隐私,这个功能在之前是不可行的,但新的 API 使之成为可能。下面是一个简单的功能实现示例。

示例代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>读取本地文件内容</title>
</head>
<body>
  <button id="btn">选择文件夹</button>
</body>
</html>

<script>
  // https://developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker
  const btnDom = document.getElementById("btn");
  btnDom.onclick = async () => {
    try {
      const directory = await window.showDirectoryPicker();
      const root = await processDirectory(directory);
      await renderAllFile(root);
    } catch (error) {
      console.error(error);
    }
  };

  const fileKind = 'file';
  
  const processDirectory = async (directory) => {
    if (directory.kind === fileKind) {
      return directory;
    }
    directory.children = [];
    const iter = directory.entries();
    for await (const item of iter) {
      directory.children.push(await processDirectory(item[1]));
    }
    return directory;
  };

  const renderAllFile = async (root) => {
    const rootType = Array.isArray(root);
    const rootFiles = rootType ? root : [root];
    for (let i = 0; i < rootFiles.length; i++) {
      const rootItem = rootFiles[i];
      if (rootItem.kind === fileKind) {
        await readerFile(rootItem);
      }
      if ((rootItem?.children || []).length) {
        await renderAllFile(rootItem.children);
      }
    }
  };

  const readerFile = async (fileHandle) => {
    const file = await fileHandle.getFile();
    const render = new FileReader();
    render.onload = (e) => {
      const fileText = e.target.result;
      console.log('读取的文件名', file.name);
      console.log('读取的文件内容', fileText);
    };
    render.readAsText(file, 'utf-8');
  };
</script>

说明

  1. 该代码使用 showDirectoryPicker API 获取用户选择的文件夹。
  2. processDirectory 函数递归处理目录,收集文件信息。
  3. renderAllFile 函数读取所有文件并打印文件名和内容。
复制全文 生成海报 编程 Web开发 JavaScript 文件处理

推荐文章

如何在 Linux 系统上安装字体
2025-02-27 09:23:03 +0800 CST
Golang 中你应该知道的 noCopy 策略
2024-11-19 05:40:53 +0800 CST
JavaScript设计模式:桥接模式
2024-11-18 19:03:40 +0800 CST
利用图片实现网站的加载速度
2024-11-18 12:29:31 +0800 CST
rangeSlider进度条滑块
2024-11-19 06:49:50 +0800 CST
Go 并发利器 WaitGroup
2024-11-19 02:51:18 +0800 CST
虚拟DOM渲染器的内部机制
2024-11-19 06:49:23 +0800 CST
支付宝批量转账
2024-11-18 20:26:17 +0800 CST
Boost.Asio: 一个美轮美奂的C++库
2024-11-18 23:09:42 +0800 CST
纯CSS绘制iPhoneX的外观
2024-11-19 06:39:43 +0800 CST
mysql关于在使用中的解决方法
2024-11-18 10:18:16 +0800 CST
thinkphp分页扩展
2024-11-18 10:18:09 +0800 CST
Vue3中如何进行异步组件的加载?
2024-11-17 04:29:53 +0800 CST
使用Python提取图片中的GPS信息
2024-11-18 13:46:22 +0800 CST
Vue3中的事件处理方式有何变化?
2024-11-17 17:10:29 +0800 CST
Golang中国地址生成扩展包
2024-11-19 06:01:16 +0800 CST
一文详解回调地狱
2024-11-19 05:05:31 +0800 CST
Java环境中使用Elasticsearch
2024-11-18 22:46:32 +0800 CST
开源AI反混淆JS代码:HumanifyJS
2024-11-19 02:30:40 +0800 CST
乐观锁和悲观锁,如何区分?
2024-11-19 09:36:53 +0800 CST
Plyr.js 播放器介绍
2024-11-18 12:39:35 +0800 CST
程序员茄子在线接单