web端本地文件系统api

起因

使用vscode 网页端时,很诧异为什么直接将我本地的文件直接修改了的。发现了chrome 84版本后,是支持本地文件系统api的。

示例

<button id="btn">获取</button>
<button id="btn1">保存</button>
<script>
  const btn = document.getElementById("btn");
  const btn1 = document.getElementById("btn1");
  let handle;
  let code;
  let file;
  const opts = {
    type: "saveFile",
    accepts: [
      {
        description: "Text file",
        extensions: ["txt"],
        mimeTypes: ["text/plain"],
      },
    ],
  };
  btn.onclick = async function () {
    try {
      [handle] = await showOpenFilePicker(opts);
    } catch (e) {
      if (e.message.indexOf("The user aborted a request") === -1) {
        console.error(e);
        return;
      }
    }
    if (!handle) {
      return;
    }
    // 这里的 options 用来声明对文件的权限,能否写入
    const options = {
      writable: true,
      mode: "readwrite",
    };
    // 然后向用户要求权限
    if (
      (await handle.queryPermission(options)) !== "granted" &&
      (await handle.requestPermission(options)) !== "granted"
    ) {
      alert("Please grant permissions to read & write this file.");
      return;
    }
    // 前面获取的是 FileHandle,需要转换 File 才能用
    file = await handle.getFile();
    // 接下来,`file` 就是普通 File 实例,你想怎么处理都可以,比如,获取文本内容
    code = await file.text();
  };

  btn1.onclick = async function () {
    try {
      console.log(handle);
      const writable = await handle.createWritable();
      code = `${code}\n ${code}`
      await writable.write(code);
      await writable.close();
    } catch (e) {
      if (e.message.indexOf("The user aborted a request.") === -1) {
        console.error(e);
      }
      return;
    }
  };
</script>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容