使用File System Access API 直接读写本地文件

File System Access API 是一个相对较新的 API,它允许 Web 应用直接访问用户的本地文件系统,提供了文件的读取、编辑和保存功能。这项 API 极大地扩展了 Web 应用的能力,使其可以像桌面应用一样处理文件。

什么是 File System Access API

File System Access API 允许用户在 Web 应用中选择本地文件并进行操作。你可以通过此 API 读取、修改甚至创建文件,从而实现诸如文本编辑器、图像编辑器等应用场景。用户需明确授权才能让 Web 应用访问其本地文件。

基本用法

1. 打开文件并读取内容

使用 showOpenFilePicker() 方法,可以让用户选择一个文件,然后读取其内容:

javascript 复制代码
async function readFile() {
  try {
    // 显示文件选择器
    const [fileHandle] = await window.showOpenFilePicker();
    const file = await fileHandle.getFile();
    const contents = await file.text();
    console.log('文件内容:', contents);
  } catch (error) {
    console.error('读取文件失败:', error);
  }
}

readFile();
2. 保存文件

使用 showSaveFilePicker() 可以让用户选择保存位置并写入文件内容:

javascript 复制代码
async function saveFile() {
  try {
    const fileHandle = await window.showSaveFilePicker({
      suggestedName: 'example.txt',
      types: [{
        description: 'Text Files',
        accept: { 'text/plain': ['.txt'] }
      }]
    });

    const writable = await fileHandle.createWritable();
    await writable.write('Hello, File System Access API!');
    await writable.close();
    console.log('文件保存成功');
  } catch (error) {
    console.error('保存文件失败:', error);
  }
}

saveFile();

应用场景

  1. 文本编辑器:可以实现 Web 版的文本编辑器,用户可以直接从本地读取文件进行编辑,并保存修改。
  2. 图像编辑器:允许用户从本地上传图像进行处理,然后保存修改后的文件。
  3. 文件管理工具:为用户提供一个 Web 应用版本的文件管理工具,实现文件的浏览、修改和创建。

权限与安全

File System Access API 出于安全考虑,所有文件操作都需要用户明确授权。用户每次操作都会弹出文件选择对话框,确保 Web 应用不会未经允许修改或访问用户文件。

优势

  • 提供了原生的文件读写能力,使 Web 应用具备桌面应用的文件操作功能。
  • 不需要依赖服务器端进行文件操作,用户可以直接本地完成文件处理。
  • 增强用户隐私,文件操作由用户完全控制,确保安全性。

兼容性

目前 File System Access API 主要被 Chrome 和 Edge 等基于 Chromium 的浏览器支持,但其他浏览器尚未完全支持。未来随着 API 的成熟,预计会有更多浏览器加入对该 API 的支持。

注意事项

  • HTTPS :为了确保安全,File System Access API 只能在 HTTPS 页面上工作。
  • 权限提示:每次操作(如读取、写入文件)都会请求用户授权,防止未经许可的文件访问。

File System Access API 让 Web 应用可以更好地与本地文件系统进行交互,突破了以往只能通过上传下载方式与文件打交道的限制。它的出现使得 Web 应用在功能性上接近桌面应用,是开发现代化 Web 应用的一大利器。

相关推荐
dr李四维13 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
ifanatic14 分钟前
[面试]-golang基础面试题总结
面试·职场和发展·golang
I_Am_Me_27 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
雯0609~34 分钟前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ37 分钟前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云
学习前端的小z43 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
程序猿进阶1 小时前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
前端百草阁1 小时前
【TS简单上手,快速入门教程】————适合零基础
javascript·typescript
彭世瑜1 小时前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund4041 小时前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html