Chrome浏览器支持直接读写本地文件了

本文首发于公众号:符合预期的CoyPanjavascript

写在前面

最新版的Chrome(Chrome 83)支持直接读写本地文件了。html

当前如何读写本地文件

目前最多见的读取本地文件方法:java

一、使用input标签获取文件File对象。web

<input type="file" />
复制代码

二、使用FileReader读取文件。chrome

var reader = new FileReader();
reader.onload = function (event) {
    // event.target.result就是读取的内容
    ...
};
// 这里的file为File对象实例
reader.readAsText(file);
// reader.readAsDataURL(file);
// reader.readAsArrayBuffer(file);
复制代码

写文件方法: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浏览器下,如何读写文件

读文件bash

使用window.chooseFileSystemEntries这个api。须要注意的是,调用这个api,必须由用户的操做触发,好比点击等。app

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

调用api后,会弹出文件窗口,用户选择文件后,就能够拿到文件的句柄了。async

接着,调用句柄的方法,就能够拿到文件内容了。

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);
  ...             
});
复制代码

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

关于本地文件读写的更多信息,参考这篇文章:web.dev/native-file…

示例Demo

新的文件Api十分方便。我简单写了一个demo,在浏览器编辑本地文件。

Demo体验地址和代码在这里(请使用最新版的桌面Chrome浏览器访问,且开启文件读写权限):

coypan.info/demo/chrome…

写在后面

Chrome这一波更新,你怎么看?web app ?web os?

相关文章
相关标签/搜索