怎样利用File System Access API实现本地文件操作?

File System Access API 允许网页在用户授权下直接读写本地文件,通过 showOpenFilePicker、showDirectoryPicker 和 showSaveFilePicker 方法实现文件选择与保存,结合 getFile、createWritable 进行读写操作,支持目录遍历与内容追加,需在 HTTPS 或 localhost 环境运行并基于用户手势触发,确保安全。

怎样利用file system access api实现本地文件操作?

File System Access API 让网页应用可以直接读写用户本地文件,提供更接近原生应用的体验。它适用于现代 Chromium 浏览器(如 Chrome、Edge),能实现打开、保存、读取和修改文件等操作,无需依赖传统 input 元素或服务器中转。

请求访问文件或目录

通过 window.showOpenFilePicker()window.showDirectoryPicker() 可让用户选择文件或文件夹。

例如打开单个文本文件:

const [fileHandle] = await window.showOpenFilePicker({ types: [{ description: ‘Text files’, accept: { ‘text/plain’: [‘.txt’] } }] }); const file = await fileHandle.getFile(); const contents = await file.text(); console.log(contents);

若需访问整个目录:

const dirHandle = await window.showDirectoryPicker(); for await (const entry of dirHandle.values()) { if (entry.kind === ‘file’) { const file = await entry.getFile(); console.log(file.name); } }

读取与写入文件内容

获取文件句柄后,可用 getFile() 读取内容,用 createWritable() 写入数据。

写入新内容到文件:

const writable = await fileHandle.createWritable(); await writable.write(‘新的文件内容’); await writable.close();

追加内容可指定位置:

const writable = await fileHandle.createWritable(); await writable.write({ type: ‘seek’, position: file.size }); // 移动到末尾 await writable.write(‘n新增一行’); await writable.close();

创建并保存新文件

使用 window.showSaveFilePicker() 弹出保存对话框,用户选择路径后即可写入。

const newFileHandle = await window.showSaveFilePicker({ suggestedName: ‘untitled.txt’, types: [{ description: ‘Text files’, accept: { ‘text/plain’: [‘.txt’] } }] }); const writable = await newFileHandle.createWritable(); await writable.write(‘这是新建文件的内容’); await writable.close();

权限管理与安全限制

所有操作必须在用户手势(如点击)上下文中触发,防止恶意调用。浏览器会记住用户对特定源的授权状态。

检查是否已有写权限:

const permissions = await fileHandle.queryPermission({ mode: ‘readwrite’ }); if (permissions !== ‘granted’) { await fileHandle.requestPermission({ mode: ‘readwrite’ }); }

注意点:API 仅在 HTTPS 或 localhost 环境下可用 不能直接访问系统路径,必须由用户主动选择 部分旧浏览器不支持,需做特性检测基本上就这些。掌握核心方法后,就能构建类似编辑器、配置工具等需要本地文件交互的应用。

以上就是怎样利用File System Access API实现本地文件操作?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1528451.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何构建一个高性能的、基于Canvas的JavaScript数据可视化组件?
上一篇 2026年5月10日 10:39:46
Python3多线程怎么实现_Python3多线程编程方法与实例解析
下一篇 2026年5月10日 10:39:51

相关推荐

  • C++异常安全模式 错误恢复策略设计

    异常安全编程需遵循三个保证级别:基本保证、强保证和不抛异常保证。通过RAII管理资源,确保异常时资源释放;使用复制再交换模式实现强异常安全;结合局部恢复、状态回滚等策略设计错误恢复机制,确保程序在异常发生时状态一致且不泄漏资源。 在C++中进行异常安全编程,核心目标是确保程序在发生异常时仍能保持对象…

    2026年5月10日
    000
  • 正则表达式匹配行首或字符集:Golang 教程

    本文旨在解决正则表达式匹配行首或特定字符集的问题,并提供 Golang 语言的实现方案。通过使用选择分支和精简字符集,可以构建更简洁、高效的正则表达式,同时避免不必要的转义,提高代码可读性。本文提供了一个经过优化的正则表达式,可用于检测以 `MYNAME` 开头的行,或以特定字符集后跟 `MYNAM…

    2026年5月10日
    000
  • 使用 Go 发送带有嵌套参数的 POST 请求

    本文旨在帮助 Go 语言初学者理解如何发送带有嵌套参数的 POST 请求。由于 HTTP 协议本身不支持参数嵌套,我们需要通过特定的编码方式来模拟这种结构。本文将介绍如何在 Go 中处理这种情况,并提供示例代码和注意事项。 在 Go 中,net/http 包提供了发送 HTTP 请求的功能。http…

    2026年5月10日
    000
  • 手机浏览器html怎么运行环境_手机浏览器html运行环境配置【教程】

    首先确保HTML文件正确存储于手机可访问目录并以.html格式保存,使用文件管理器通过主流浏览器打开;其次选用Chrome或Firefox等支持HTML5的现代浏览器,避免兼容性问题;接着在浏览器中启用本地文件执行权限,如在Chrome中开启“Local file access”实验功能;若仍无法正…

    2026年5月10日
    000
  • editplus怎么编译运行html_editplus编译运行html方法【教程】

    首先配置浏览器运行工具,在EditPlus中添加自定义工具指向浏览器程序,命令为浏览器路径,参数设为$(FilePath),初始目录为$(FileDir);然后设置快捷键如Ctrl+Shift+R,实现一键预览;最后可通过自定义工具栏将运行按钮添加至工具栏,方便鼠标点击运行HTML文件。 如果您在E…

    2026年5月10日
    000
  • Python3多线程怎么实现_Python3多线程编程方法与实例解析

    多线程可提升Python程序效率,常用方法包括:1. threading模块创建线程;2. 继承Thread类自定义线程;3. 使用ThreadPoolExecutor管理线程池;4. 用Lock解决数据竞争;5. 通过Queue实现线程安全通信。 如果您希望在Python3中提升程序执行效率,通过…

    2026年5月10日
    000
  • c++中π用什么表示 圆周率在C++中的表示方法

    在c++++中表示圆周率π的方法有三种:1) 使用m_pi,需要包含头文件,但它不是c++标准的一部分;2) 使用std::acos(-1),这是c++标准的一部分,适用于所有编译器,但可能引入计算误差;3) 自定义常量,代码可读性高但需手动维护π的值。 在C++中,圆周率π通常用M_PI来表示,这…

    2026年5月10日
    100
  • 如何构建一个高性能的、基于Canvas的JavaScript数据可视化组件?

    答案:通过按需渲染、减少上下文操作和高效交互检测实现高性能Canvas可视化。使用isDirty标记控制重绘,合并路径绘制,预存静态图层,结合devicePixelRatio适配高清屏,利用空间索引与节流优化交互响应,避免全量刷新,提升性能。 构建一个高性能的基于 Canvas 的 JavaScri…

    2026年5月10日
    100
  • 解决纯CSS加载动画伪元素延迟不同步问题:原理、调试与优化

    本文深入探讨纯css加载动画中伪元素animation-delay行为与预期不符的问题。通过分析animation-delay和animation-play-state的交互机制,提供了一种移除不必要延迟以实现动画立即错位启动的优化方案。同时,文章强调了利用chrome开发者工具进行动画调试的重要性…

    2026年5月10日
    100
  • 彻底明白币圈K线图中的支撑位、阻力位与趋势线用法

    在数字货币交易领域,K线图是分析市场动态的基础工具。读懂K线图中的各种信号,对于交易者理解市场情绪和价格行为至关重要。其中,支撑位、阻力位与趋势线是技术分析中的三个核心概念,它们共同构成了价格分析的框架,帮助交易者识别潜在的交易机会和风险区域。 支撑位:价格下跌的缓冲带 1、支撑位指的是一个价格区间…

    2026年5月10日
    000
  • 币圈免费价格查询网站_十大币圈免费价格查询网站有哪些

    本文盘点十大免费币圈价格查询网站:1.币安、2.欧易、3.火币、4.Gate.io、5.CoinMarketCap、6.CoinGecko、7.TradingView、8.非小号、9.MyToken、10.CryptoCompare,均提供实时行情与丰富分析工具。 对于数字货币投资者而言,实时、准确…

    2026年5月10日
    000
  • 怎样用Python处理科学计算?numpy基础指南

    怎样用Python处理科学计算?numpy基础指南怎样用Python处理科学计算?numpy基础指南怎样用Python处理科学计算?numpy基础指南怎样用Python处理科学计算?numpy基础指南

    numpy是python中科学计算的基础工具,提供高效的数组操作和数学运算功能。其核心为ndarray对象,可通过列表或元组创建数组,并支持多种内置函数生成数组,如zeros、ones、arange、linspace;数组运算默认逐元素执行,支持统计计算、矩阵乘法,且性能优于原生列表;索引与切片灵活…

    2026年5月10日 用户投稿
    000
  • html 如何_HTML语言的基本用法与技巧【基本教程】

    HTML文档基本结构包括DOCTYPE声明、html根元素及head/body两部分;文本使用p、h1-h6、strong/em;链接用a标签,图像用img加alt;列表分ol/ul;表单需form包裹、label绑定、input设type。 一、HTML文档的基本结构 每个标准HTML页面都必须包…

    2026年5月10日
    100
  • Golang如何实现云原生日志结构化_Golang 日志结构化与分析实践

    使用zap等结构化日志库输出JSON格式日志,结合context传递trace_id、user_id等上下文信息,通过Loki或ELK等系统实现云原生环境下的集中采集与检索,提升可观测性。 Go语言在云原生环境中被广泛使用,良好的日志结构化是可观测性的基础。默认的log包输出的是纯文本,不利于集中采…

    2026年5月10日
    000
  • PHP框架怎么管理数据库迁移_PHP框架迁移文件与版本控制

    数据库迁移是PHP开发中管理结构变更的核心机制,通过Laravel等框架的迁移文件可定义up()/down()方法实现变更与回滚;迁移文件需纳入Git版本控制,按时间戳命名、每次提交单一逻辑变更且禁止修改已提交文件;团队协作时应先拉取最新代码再创建迁移,合并时检查顺序,生产环境通过php artis…

    2026年5月10日
    000
  • 欧易官方iOS版下载_苹果手机欧易APP官方入口

    欧易官方iOS版下载_苹果手机欧易APP官方入口欧易官方iOS版下载_苹果手机欧易APP官方入口欧易官方iOS版下载_苹果手机欧易APP官方入口欧易官方iOS版下载_苹果手机欧易APP官方入口

    想要进入数字资产的世界,选择一个安全可靠的平台至关重要。本文将作为您的向导,详细拆解欧易(okx)交易所从入门到上手的全部流程,包括官方渠道访问、app安全下载安装,以及新用户注册的每一步。跟随本指南,轻松开启您的交易之旅。 第一步:访问欧易OKX官方网站 欧易官方网址: 欧易官方app: 1、请通…

    2026年5月10日 用户投稿
    000
  • 本地XAMPP服务器与Git仓库集成开发指南

    本教程旨在指导开发者如何高效地在本地xampp服务器上搭建并运行基于git版本控制的项目。通过在本地xampp环境中克隆远程git仓库,并在独立的开发分支上工作,可以实现与主服务器隔离的开发流程,确保本地测试的独立性与安全性,同时简化版本管理与代码协作。 前言:本地开发环境的重要性 在软件开发过程中…

    2026年5月10日
    000
  • 深入理解Go语言exec.Command调用外部命令的参数传递机制

    本文深入探讨了Go语言中exec.Command调用外部命令时,特别是针对sed这类需要复杂参数的工具,常见的参数传递错误及正确实践。核心在于理解exec.Command默认不通过shell解析参数,因此每个参数都应作为独立的字符串传递,避免将整个命令字符串或带引号的参数作为一个整体。通过实例代码,…

    2026年5月10日
    000
  • 如何在Golang中使用defer延迟执行

    defer关键字用于延迟执行函数调用,确保在函数返回前执行资源清理等操作;多个defer按后进先出顺序执行。 在Golang中,defer 是一个非常实用的关键字,用于延迟执行某个函数调用,直到包含它的函数即将返回时才执行。它常用于资源清理、解锁、关闭文件等场景,确保关键操作不会被遗漏。 defer…

    2026年5月10日
    000
  • 优化HTML结构:使用JavaScript移除a标签内的b标签

    优化HTML结构:使用JavaScript移除a标签内的b标签优化HTML结构:使用JavaScript移除a标签内的b标签优化HTML结构:使用JavaScript移除a标签内的b标签优化HTML结构:使用JavaScript移除a标签内的b标签

    本教程旨在解决html结构中常见的冗余问题,特别是如何使用javascript高效地移除嵌套在“标签内的“标签。文章将详细介绍通过dom操作选取元素、提取文本并替换内容的核心方法,并提供鲁棒的示例代码和在node.js环境下处理html的注意事项,以帮助开发者优化页面结构和提升可维护性…

    2026年5月10日 用户投稿
    000

发表回复

登录后才能评论
关注微信