Chrome瀏覽器支持直接讀寫本地文件了

本文首發於公衆號:符合預期的CoyPan

寫在前面

最新版的Chrome(Chrome 83, 須要開啓權限)支持直接讀寫本地文件了。javascript

開啓方法:Chrome瀏覽器升級到83版本以上;訪問chrome://flags/,開啓 Native File System API 選項

當前如何讀寫本地文件

目前最多見的讀取本地文件方法:html

一、使用input標籤獲取文件File對象。java

<input type="file" />

二、使用FileReader讀取文件。web

var reader = new FileReader();
reader.onload = function (event) {
    // event.target.result就是讀取的內容
    ...
};
// 這裏的file爲File對象實例
reader.readAsText(file);
// reader.readAsDataURL(file);
// reader.readAsArrayBuffer(file);

寫文件方法:chrome

很遺憾,如今沒有直接寫文件到本地的方法。不過,大概能夠用下面的方法來實現:api

var textFileAsBlob = new Blob(['hello word'], {type:'text/plain'});
var downloadLink = document.createElement("a");
downloadLink.download = 'test.txt';
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.click();

最新的Chrome瀏覽器下,如何讀寫文件

讀文件瀏覽器

使用window.chooseFileSystemEntries這個api。須要注意的是,調用這個api,必須由用戶的操做觸發,好比點擊等。app

// 文件句柄
let fileHandle;
button.addEventListener('click', async (e) => {
  fileHandle = await window.chooseFileSystemEntries();
  console.log(fileHandle);
});

調用api後,會彈出文件窗口,用戶選擇文件後,就能夠拿到文件的句柄了。async

接着,調用句柄的方法,就能夠拿到文件內容了。spa

let fileHandle;
button.addEventListener('click', async (e) => {
  fileHandle = await window.chooseFileSystemEntries();
  const file = await globalFileHandle.getFile();
  const contents = await file.text(); // 這裏的方法還有:slice(), stream(), arrayBuffer()
});

寫文件

寫文件,分紅兩種狀況,一種是直接寫入原文件,一種是寫入一個新文件。

寫入原文件,咱們只須要拿到原文件的句柄,調用句柄的方法就能夠了。

const writable = await fileHandle.createWritable();
  await writable.write('new content');
  await writable.close();

寫入新文件,首先須要新建一個文件,依然是調用window.chooseFileSystemEntries這個api,不過此次須要傳入一些參數。

button.addEventListener('click', async function() {
    const opts = {
      type: 'save-file',
      accepts: [{
          description: 'Text file',
          extensions: ['txt'],
          mimeTypes: ['text/plain'],
      }]
  };
  // 新建文件的句柄
  const fileHandle = await window.chooseFileSystemEntries(opts);
  ...             
});

接着,再按照前文的方法,寫入內容便可。

關於本地文件讀寫的更多信息,參考這篇文章:https://web.dev/native-file-s...

示例Demo

新的文件Api十分方便。我簡單寫了一個demo,在瀏覽器編輯本地文件。

Demo體驗地址和代碼在這裏(請使用最新版的桌面Chrome瀏覽器訪問,且開啓文件讀寫權限):

https://coypan.info/demo/chro...

寫在後面

Chrome這一波更新,你怎麼看?web app ?web os?

相關文章
相關標籤/搜索