web端本地文件系統(tǒng)api

起因

使用vscode 網(wǎng)頁端時(shí),很詫異為什么直接將我本地的文件直接修改了的。發(fā)現(xiàn)了chrome 84版本后,是支持本地文件系統(tǒng)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 用來聲明對文件的權(quán)限,能否寫入
    const options = {
      writable: true,
      mode: "readwrite",
    };
    // 然后向用戶要求權(quán)限
    if (
      (await handle.queryPermission(options)) !== "granted" &&
      (await handle.requestPermission(options)) !== "granted"
    ) {
      alert("Please grant permissions to read & write this file.");
      return;
    }
    // 前面獲取的是 FileHandle,需要轉(zhuǎn)換 File 才能用
    file = await handle.getFile();
    // 接下來,`file` 就是普通 File 實(shí)例,你想怎么處理都可以,比如,獲取文本內(nèi)容
    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>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容