新闻中心

如何利用J*aScript的File System Access API访问本地文件?

2025-10-13
浏览次数:
返回列表
File System Access API允许Web应用在安全上下文中直接读写本地文件。通过showOpenFilePicker()选择文件并获取FileSystemFileHandle,调用getFile()后使用text()、arrayBuffer()或stream()读取内容,支持文本、二进制和大文件。保存文件需用showS*eFilePicker()获取句柄,创建可写流并写入数据。该API仅在HTTPS或localhost下由用户触发时可用,且主要支持Chrome 86+,Safari等浏览器暂不支持,需降级处理。核心是“句柄”机制,确保安全访问。

如何利用javascript的file system access api访问本地文件?

J*aScript的File System Access API让Web应用可以直接与用户设备上的文件系统交互,允许读取、写入和保存本地文件,而无需通过传统的上传下载方式。这个API主要在现代浏览器(如Chrome 86+)中支持,适用于需要处理本地文档的应用,比如文本编辑器、代码编辑工具等。

请求访问单个文件

使用showOpenFilePicker()方法可以让用户选择一个或多个文件,并获取对它们的访问权限。

基本用法如下:

async function openFile() {
  try {
    const [fileHandle] = await window.showOpenFile_picker();
    const file = await fileHandle.getFile();
    const content = await file.text();
    console.log(content);
  } catch (err) {
    console.error("用户取消操作或发生错误", err);
  }
}
  

说明:

  • 调用showOpenFilePicker()会弹出文件选择框
  • 返回的是FileSystemFileHandle对象数组,从中可获取实际文件
  • getFile() 获取File对象,再用.text()读取文本内容

读取多种类型文件内容

根据文件类型,可以使用不同方法读取内容:

  • 文本文件(.txt, .json, .js 等):使用file.text()
  • 二进制数据(图片、PDF等):使用file.arrayBuffer()
  • 大文件流式读取:使用file.stream()

示例:读取JSON文件

async function openJSONFile() {
  const [handle] = await window.showOpenFilePicker({
    types: [{
      description: 'JSON 文件',
      accept: { 'application/json': ['.json'] }
    }]
  });
  const file = await handle.getFile();
  const content = await file.text();
  return JSON.parse(content);
}
  

将内容保存到文件

使用showS*eFilePicker()可以让用户指定保存路径并写入文件。

秀脸FacePlay 秀脸FacePlay

一款集成AI换脸、照片跳舞等多种AI特效玩法的App

秀脸FacePlay 124 查看详情 秀脸FacePlay

步骤包括:

  • 请求保存位置,获得文件句柄
  • 创建可写流
  • 写入内容并关闭流

示例:保存文本内容

async function s*eFile(content) {
  const handle = await window.showS*eFilePicker({
    suggestedName: 'document.txt',
    types: [{
      description: '文本文档',
      accept: { 'text/plain': ['.txt'] }
    }]
  });

  const writable = await handle.createWritable();
  await writable.write(content);
  await writable.close();
}
  

检查浏览器支持和安全限制

该API只能在安全上下文中使用(HTTPS 或 localhost),并且需要用户主动触发(如点击按钮)才能调用。

建议先检测是否支持:

if ('showOpenFilePicker' in window) {
  // 可以使用 File System Access API
} else {
  alert('当前浏览器不支持此功能,请使用 Chrome 或 Edge 最新版');
}
  

注意:Safari 和部分浏览器暂未支持,需做好降级处理(例如回退到 input[type=file])。

基本上就这些。掌握这几个核心方法后,就能实现较完整的本地文件读写功能。关键是理解“句柄(Handle)”的概念——它代表对某个文件或目录的引用,是安全模型的一部分,避免网页随意访问整个磁盘。

以上就是如何利用J*aScript的File System Access API访问本地文件?的详细内容,更多请关注其它相关文章!


# java  # 推广无纸化营销的工具  # 佛山问答seo推广外包  # 电子杂志营销推广方式  # 内江营销推广电话是多少  # 在模型网站建设需要  # 创意模型网站建设论文  # 就能  # 有哪些  # 文档  # 大文件  # 的是  # 如何实现  # 如何用  # 可以使用  # javascript  # js  # json  # 浏览器  # app  # edge  # access  # 工具  # safari  # ai  # pdf  # 句柄  # 如何使用  # 唐山智能化网站推广介绍  # SEO人才公园灯光  # 新媒体营销推广系统图片  # 百度排名会改关键词 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择  12306选座怎么选到商务座_12306商务座选择与配置说明  qq游戏免费畅玩入口_qq游戏电脑版快速启动  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  如何使用Go和Martini动态服务解码后的图片  excel怎么制作工资条 excel快速生成工资条的方法  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  AO3官网镜像链接 Archive of Our Own同人文在线浏览  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  《燕云十六声》两周内达九百万玩家!位居畅销榜第五  Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】  Steam官网入口直达 Steam注册及登录步骤  Lar*el Form Request中唯一性验证在更新操作中的正确实现  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  快速CSGO开箱网站指南 CSGO开箱平台推荐  css滚动动画效果怎么实现_使用Animate.css滚动触发动画类  Excel Power Pivot如何处理XML数据源 构建高级数据模型  Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  在WordPress中通过REST API获取BasicAuth保护的远程文章  构建轻量级网站内部消息系统:Formspree 集成指南  知音漫客正版漫画平台_知音漫客官网账号登录  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  J*aScript中正确使用querySelectorAll与复杂CSS选择器  汽水音乐在线版入口_汽水音乐网页播放手册  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略  多闪网页版在线观看免费入口_多闪官网访问入口  J*aScript实现单选按钮与关联输入框的联动禁用教程  将JSON对象数组转置为键值对列表的实用指南  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  CSS Box Model与弹性按钮:维持布局稳定的动画实践  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  绝地鸭卫平a核爆刀流玩法攻略  J*a应用程序首次运行自动创建文件与目录的最佳实践  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址 

搜索