美文网首页
web端本地文件系统api

web端本地文件系统api

作者: 小俊的世界 | 来源:发表于2022-02-11 17:51 被阅读0次

    起因

    使用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>
    

    相关文章

      网友评论

          本文标题:web端本地文件系统api

          本文链接:https://www.haomeiwen.com/subject/lvfokrtx.html