当前位置:首页 > 科技  > 软件

纯前端也可以访问文件系统!

来源: 责编: 时间:2023-10-26 17:12:22 211观看
导读前言周末逛github的时候,发现我们只需要在github域名上加上1s他就能够打开一个vscode窗口来阅读代码,比起在github仓库中查看更加方便图片然后我就想网页端vscode能不能打开我本地的项目呢,带着这个疑惑我打开了网页版vs

前言

周末逛github的时候,发现我们只需要在github域名上加上1s他就能够打开一个vscode窗口来阅读代码,比起在github仓库中查看更加方便Kx728资讯网——每日最新资讯28at.com

图片图片Kx728资讯网——每日最新资讯28at.com

然后我就想网页端vscode能不能打开我本地的项目呢,带着这个疑惑我打开了网页版vscode,它居然真的可以打开我本地的项目代码!Kx728资讯网——每日最新资讯28at.com

图片图片Kx728资讯网——每日最新资讯28at.com

难道又出了新的API让前端的能力更进一步了?打开MDN查了一下相关文档,发现了几个新的APIKx728资讯网——每日最新资讯28at.com

showOpenFilePicker

用来选择文件Kx728资讯网——每日最新资讯28at.com

图片图片Kx728资讯网——每日最新资讯28at.com

语法

showOpenFilePicker()

参数

  • 「options」:(可选)包含以下属性

multiple:布尔值,默认为false。为true表示允许用户选择多个文件Kx728资讯网——每日最新资讯28at.com

excludeAcceptAllOption:布尔值,默认为false。默认情况下,文件选择器带有一个允许用户选择所有类型文件的过滤选项(展开于文件类型选项中)。设置此选项为 true 以使该过滤选项不可用。Kx728资讯网——每日最新资讯28at.com

types:表示允许选择的文件类型的数组Kx728资讯网——每日最新资讯28at.com

返回值

返回一个promise对象,会兑现一个包含 FileSystemFileHandle 对象的 Array 数组。Kx728资讯网——每日最新资讯28at.com

体验

<template>  <div class="open_file" @click="openFile">打开文件</div></template><script setup lang="ts">const openFile = async () => {  const res = await window.showOpenFilePicker();  console.log(res);};</script>

默认只能打开一个文件,可以传入multiple:true打开多个文件Kx728资讯网——每日最新资讯28at.com

图片图片Kx728资讯网——每日最新资讯28at.com

showDirectoryPicker

用来选择目录Kx728资讯网——每日最新资讯28at.com

图片图片Kx728资讯网——每日最新资讯28at.com

语法

属于浏览器全局方法,直接调用即可Kx728资讯网——每日最新资讯28at.com

showDirectoryPicker()

参数

  • 「options」:(可选)包含以下属性

multiple:布尔值,默认为false。为true表示允许用户选择多个文件Kx728资讯网——每日最新资讯28at.com

excludeAcceptAllOption:布尔值,默认为false。默认情况下,文件选择器带有一个允许用户选择所有类型文件的过滤选项(展开于文件类型选项中)。设置此选项为 true 以使该过滤选项不可用。Kx728资讯网——每日最新资讯28at.com

types:表示允许选择的文件类型的数组Kx728资讯网——每日最新资讯28at.com

返回值

返回一个promise对象,会兑现一个包含 FileSystemFileHandle 对象的 Array 数组。Kx728资讯网——每日最新资讯28at.com

体验

<template>  <div class="open_file" @click="openFile">打开文件</div>  <div class="open_file" @click="openDir">打开文件夹</div></template><script setup lang="ts">const openFile = async () => {  const res = await window.showOpenFilePicker({    // multiple: true,  });  console.log(res.length);};const openDir = async () => {  const res = await window.showDirectoryPicker();  console.log(res);};</script>

图片图片Kx728资讯网——每日最新资讯28at.com

扩展

FileSystemFileHandle

FileSystemFileHandle提供了一些方法可以用来获取和操作文件Kx728资讯网——每日最新资讯28at.com

  • getFile:返回一个Promise对象,用于获取文件;
  • createSyncAccessHandle:返回一个FileSystemSyncAccessHandle对象,用于同步访问文件;
  • createWritable:返回一个Promise对象,用于创建一个可写流,用于写入文件;

FileSystemDirectoryHandle

FileSystemDirectoryHandle对象是一个代表文件系统中的目录的对象,它同样提供了方法来获取和操作目录Kx728资讯网——每日最新资讯28at.com

  • entries:返回一个AsyncIterable对象,用于获取目录中的所有文件和目录;
  • keys:返回一个AsyncIterable对象,用于获取目录中的所有文件和目录的名称;
  • values:返回一个AsyncIterable对象,用于获取目录中的所有文件和目录的FileSystemHandle对象;
  • getFileHandle:返回一个Promise对象,用于获取目录中的文件;
  • getDirectoryHandle:返回一个Promise对象,用于获取目录中的目录;
  • removeEntry:返回一个Promise对象,用于删除目录中的文件或目录;
  • resolve:返回一个Promise对象,用于获取目录中的文件或目录;

entries、keys、values这三个方法都是用来获取目录中的所有文件和目录的,它们返回的都是一个AsyncIterable对象,我们可以通过for await...of语法来遍历它。Kx728资讯网——每日最新资讯28at.com

开发编辑器

了解完这些知识点,我们就可以来开发一个简陋网页版编辑器了,初期只包含打开文件、打开文件夹、查看文件、切换文件Kx728资讯网——每日最新资讯28at.com

编辑器大概长这样:Kx728资讯网——每日最新资讯28at.com

图片图片Kx728资讯网——每日最新资讯28at.com

打开文件夹

const openDir = async () => {  const res = await window.showDirectoryPicker({});  const detalAction = async (obj: any) => {    if (obj.entries) {      const dirs = obj.entries();      for await (const entry of dirs) {        if (entry[1].entries) {          // 文件夹,递归处理          detalAction(entry[1]);        } else {          // 文件          fileList.value.push({            name: entry[0],            path: obj.name,            fileHandle: entry[1],          });        }      }    }  };  await detalAction(res);  showCode(fileList.value[0], 0);  console.log("--fileList--", fileList);};

这里主要是递归处理文件夹,返回一个文件列表Kx728资讯网——每日最新资讯28at.com

读取文件内容

const showCode = async (item: any, index: number) => {  const file = await item.fileHandle.getFile();  const text = await file.text();  codeText.value = text;  currentIndex.value = index;};

展示文件内容

使用highlight.js来高亮展示代码Kx728资讯网——每日最新资讯28at.com

<div class="show_code">  <pre v-highlight>        <code class="lang-dart">            {{ codeText }}        </code>   </pre></div>

最终效果如下:Kx728资讯网——每日最新资讯28at.com

图片图片Kx728资讯网——每日最新资讯28at.com

想不到吧,这种功能现在纯前端就能够实现了,当然还可以做的更复杂一点,包括修改保存等功能,保存可以使用showSaveFilePickerAPI,它可以写入文件,同样是返回一个promise。感兴趣的可以试着完善编辑器的功能。Kx728资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-15231-0.html纯前端也可以访问文件系统!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Golang 中的 String、rune 和 byte,你了解了吗?

下一篇: 技术团队运用度量驱动开发提升质量:策略与实践

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 红魔电竞平板评测:大屏幕硬实力

    红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • vivo TWS Air开箱体验:真轻 臻好听

    vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 学习JavaScript的10个理由...

    学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
Top
Baidu
map