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

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

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

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

前言

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

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

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

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

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

showOpenFilePicker

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

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

語法

showOpenFilePicker()

參數

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

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

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

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

返回值

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

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

showDirectoryPicker

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

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

語法

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

showDirectoryPicker()

參數

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

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

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

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

返回值

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

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

擴展

FileSystemFileHandle

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

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

FileSystemDirectoryHandle

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

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

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

開發編輯器

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

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

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • OPPO K11評測:旗艦級IMX890加持 2000元檔最強影像手機

    【Techweb評測】中端機型用戶群體巨大,占了中國目前手機市場的大頭,一直以來都是各手機品牌的“必爭之地”,其中OPPO K系列機型一直以來都以高品質、
  • 電博會上海爾智家模擬500平大平層,還原生活空間沉浸式體驗

    電博會為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗。程傳
Top 主站蜘蛛池模板: 兴宁市| 仁怀市| 南岸区| 岳阳县| 绍兴县| 拜泉县| SHOW| 安庆市| 临漳县| 宜君县| 奈曼旗| 德阳市| 新河县| 南宁市| 西青区| 邵阳市| 花莲市| 靖宇县| 咸丰县| 维西| 元氏县| 庐江县| 樟树市| 尉犁县| 镇坪县| 喀喇| 夏河县| 宜君县| 阳山县| 老河口市| 乌拉特中旗| 玉门市| 宿迁市| 富蕴县| 贺兰县| 北宁市| 开平市| 玉门市| 阿荣旗| 和龙市| 荔波县|