日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

純前端也可以訪問文件系統!

來源: 責編: 時間:2023-10-26 17:12:22 299觀看
導讀前言周末逛github的時候,發現我們只需要在github域名上加上1s他就能夠打開一個vscode窗口來閱讀代碼,比起在github倉庫中查看更加方便圖片然后我就想網頁端vscode能不能打開我本地的項目呢,帶著這個疑惑我打開了網頁版vs

前言

周末逛github的時候,發現我們只需要在github域名上加上1s他就能夠打開一個vscode窗口來閱讀代碼,比起在github倉庫中查看更加方便6kV28資訊網——每日最新資訊28at.com

圖片圖片6kV28資訊網——每日最新資訊28at.com

然后我就想網頁端vscode能不能打開我本地的項目呢,帶著這個疑惑我打開了網頁版vscode,它居然真的可以打開我本地的項目代碼!6kV28資訊網——每日最新資訊28at.com

圖片圖片6kV28資訊網——每日最新資訊28at.com

難道又出了新的API讓前端的能力更進一步了?打開MDN查了一下相關文檔,發現了幾個新的API6kV28資訊網——每日最新資訊28at.com

showOpenFilePicker

用來選擇文件6kV28資訊網——每日最新資訊28at.com

圖片圖片6kV28資訊網——每日最新資訊28at.com

語法

showOpenFilePicker()

參數

  • 「options」:(可選)包含以下屬性

multiple:布爾值,默認為false。為true表示允許用戶選擇多個文件6kV28資訊網——每日最新資訊28at.com

excludeAcceptAllOption:布爾值,默認為false。默認情況下,文件選擇器帶有一個允許用戶選擇所有類型文件的過濾選項(展開于文件類型選項中)。設置此選項為 true 以使該過濾選項不可用。6kV28資訊網——每日最新資訊28at.com

types:表示允許選擇的文件類型的數組6kV28資訊網——每日最新資訊28at.com

返回值

返回一個promise對象,會兌現一個包含 FileSystemFileHandle 對象的 Array 數組。6kV28資訊網——每日最新資訊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打開多個文件6kV28資訊網——每日最新資訊28at.com

圖片圖片6kV28資訊網——每日最新資訊28at.com

showDirectoryPicker

用來選擇目錄6kV28資訊網——每日最新資訊28at.com

圖片圖片6kV28資訊網——每日最新資訊28at.com

語法

屬于瀏覽器全局方法,直接調用即可6kV28資訊網——每日最新資訊28at.com

showDirectoryPicker()

參數

  • 「options」:(可選)包含以下屬性

multiple:布爾值,默認為false。為true表示允許用戶選擇多個文件6kV28資訊網——每日最新資訊28at.com

excludeAcceptAllOption:布爾值,默認為false。默認情況下,文件選擇器帶有一個允許用戶選擇所有類型文件的過濾選項(展開于文件類型選項中)。設置此選項為 true 以使該過濾選項不可用。6kV28資訊網——每日最新資訊28at.com

types:表示允許選擇的文件類型的數組6kV28資訊網——每日最新資訊28at.com

返回值

返回一個promise對象,會兌現一個包含 FileSystemFileHandle 對象的 Array 數組。6kV28資訊網——每日最新資訊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>

圖片圖片6kV28資訊網——每日最新資訊28at.com

擴展

FileSystemFileHandle

FileSystemFileHandle提供了一些方法可以用來獲取和操作文件6kV28資訊網——每日最新資訊28at.com

  • getFile:返回一個Promise對象,用于獲取文件;
  • createSyncAccessHandle:返回一個FileSystemSyncAccessHandle對象,用于同步訪問文件;
  • createWritable:返回一個Promise對象,用于創建一個可寫流,用于寫入文件;

FileSystemDirectoryHandle

FileSystemDirectoryHandle對象是一個代表文件系統中的目錄的對象,它同樣提供了方法來獲取和操作目錄6kV28資訊網——每日最新資訊28at.com

  • entries:返回一個AsyncIterable對象,用于獲取目錄中的所有文件和目錄;
  • keys:返回一個AsyncIterable對象,用于獲取目錄中的所有文件和目錄的名稱;
  • values:返回一個AsyncIterable對象,用于獲取目錄中的所有文件和目錄的FileSystemHandle對象;
  • getFileHandle:返回一個Promise對象,用于獲取目錄中的文件;
  • getDirectoryHandle:返回一個Promise對象,用于獲取目錄中的目錄;
  • removeEntry:返回一個Promise對象,用于刪除目錄中的文件或目錄;
  • resolve:返回一個Promise對象,用于獲取目錄中的文件或目錄;

entries、keys、values這三個方法都是用來獲取目錄中的所有文件和目錄的,它們返回的都是一個AsyncIterable對象,我們可以通過for await...of語法來遍歷它。6kV28資訊網——每日最新資訊28at.com

開發編輯器

了解完這些知識點,我們就可以來開發一個簡陋網頁版編輯器了,初期只包含打開文件、打開文件夾、查看文件、切換文件6kV28資訊網——每日最新資訊28at.com

編輯器大概長這樣:6kV28資訊網——每日最新資訊28at.com

圖片圖片6kV28資訊網——每日最新資訊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);};

這里主要是遞歸處理文件夾,返回一個文件列表6kV28資訊網——每日最新資訊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來高亮展示代碼6kV28資訊網——每日最新資訊28at.com

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

最終效果如下:6kV28資訊網——每日最新資訊28at.com

圖片圖片6kV28資訊網——每日最新資訊28at.com

想不到吧,這種功能現在純前端就能夠實現了,當然還可以做的更復雜一點,包括修改保存等功能,保存可以使用showSaveFilePickerAPI,它可以寫入文件,同樣是返回一個promise。感興趣的可以試著完善編輯器的功能。6kV28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-15231-0.html純前端也可以訪問文件系統!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

下一篇: 技術團隊運用度量驅動開發提升質量:策略與實踐

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 使用Webdriver-manager解決瀏覽器與驅動不匹配所帶來自動化無法執行的問題

    1、前言在我們使用 Selenium 進行 UI 自動化測試時,常常會因為瀏覽器驅動與瀏覽器版本不匹配,而導致自動化測試無法執行,需要手動去下載對應的驅動版本,并替換原有的驅動,可能還
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國時間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內容審核等。此前,T
Top 主站蜘蛛池模板: 邯郸县| 新野县| 莱西市| 天长市| 南陵县| 建始县| 仙居县| 天柱县| 西乌| 蒙山县| 双牌县| 临湘市| 老河口市| 凤城市| 宁南县| 嘉鱼县| 澎湖县| 隆昌县| 凤城市| 红安县| 西峡县| 聂荣县| 友谊县| 达州市| 津南区| 青阳县| 淮滨县| 灵山县| 洛阳市| 六盘水市| 阜平县| 禄丰县| 宁强县| 军事| 吉水县| 都江堰市| 沁阳市| 江华| 庆阳市| 贺州市| 磴口县|