成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

純前端也可以訪問文件系統(tǒng)!

開發(fā) 前端
excludeAcceptAllOption?:布爾值,默認(rèn)為false。默認(rèn)情況下,文件選擇器帶有一個允許用戶選擇所有類型文件的過濾選項(xiàng)(展開于文件類型選項(xiàng)中)。設(shè)置此選項(xiàng)為 true 以使該過濾選項(xiàng)不可用。

前言

周末逛github的時候,發(fā)現(xiàn)我們只需要在github域名上加上1s他就能夠打開一個vscode窗口來閱讀代碼,比起在github倉庫中查看更加方便

圖片圖片

然后我就想網(wǎng)頁端vscode能不能打開我本地的項(xiàng)目呢,帶著這個疑惑我打開了網(wǎng)頁版vscode,它居然真的可以打開我本地的項(xiàng)目代碼!

圖片圖片

難道又出了新的API讓前端的能力更進(jìn)一步了?打開MDN查了一下相關(guān)文檔,發(fā)現(xiàn)了幾個新的API

showOpenFilePicker

用來選擇文件

圖片圖片

語法

showOpenFilePicker()

參數(shù)

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

multiple:布爾值,默認(rèn)為false。為true表示允許用戶選擇多個文件

excludeAcceptAllOption:布爾值,默認(rèn)為false。默認(rèn)情況下,文件選擇器帶有一個允許用戶選擇所有類型文件的過濾選項(xiàng)(展開于文件類型選項(xiàng)中)。設(shè)置此選項(xiàng)為 true 以使該過濾選項(xiàng)不可用。

types:表示允許選擇的文件類型的數(shù)組

返回值

返回一個promise對象,會兌現(xiàn)一個包含 FileSystemFileHandle 對象的 Array 數(shù)組。

體驗(yàn)

<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>

默認(rèn)只能打開一個文件,可以傳入multiple:true打開多個文件

圖片圖片

showDirectoryPicker

用來選擇目錄

圖片圖片

語法

屬于瀏覽器全局方法,直接調(diào)用即可

showDirectoryPicker()

參數(shù)

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

multiple:布爾值,默認(rèn)為false。為true表示允許用戶選擇多個文件

excludeAcceptAllOption:布爾值,默認(rèn)為false。默認(rèn)情況下,文件選擇器帶有一個允許用戶選擇所有類型文件的過濾選項(xiàng)(展開于文件類型選項(xiàng)中)。設(shè)置此選項(xiàng)為 true 以使該過濾選項(xiàng)不可用。

types:表示允許選擇的文件類型的數(shù)組

返回值

返回一個promise對象,會兌現(xiàn)一個包含 FileSystemFileHandle 對象的 Array 數(shù)組。

體驗(yàn)

<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>

圖片圖片

擴(kuò)展

FileSystemFileHandle

FileSystemFileHandle提供了一些方法可以用來獲取和操作文件

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

FileSystemDirectoryHandle

FileSystemDirectoryHandle對象是一個代表文件系統(tǒng)中的目錄的對象,它同樣提供了方法來獲取和操作目錄

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

entries、keys、values這三個方法都是用來獲取目錄中的所有文件和目錄的,它們返回的都是一個AsyncIterable對象,我們可以通過for await...of語法來遍歷它。

開發(fā)編輯器

了解完這些知識點(diǎn),我們就可以來開發(fā)一個簡陋網(wǎng)頁版編輯器了,初期只包含打開文件、打開文件夾、查看文件、切換文件

編輯器大概長這樣:

圖片圖片

打開文件夾

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);
};

這里主要是遞歸處理文件夾,返回一個文件列表

讀取文件內(nèi)容

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

展示文件內(nèi)容

使用highlight.js來高亮展示代碼

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

最終效果如下:

圖片圖片

想不到吧,這種功能現(xiàn)在純前端就能夠?qū)崿F(xiàn)了,當(dāng)然還可以做的更復(fù)雜一點(diǎn),包括修改保存等功能,保存可以使用showSaveFilePickerAPI,它可以寫入文件,同樣是返回一個promise。感興趣的可以試著完善編輯器的功能。

責(zé)任編輯:武曉燕 來源: 前端南玖
相關(guān)推薦

2023-09-12 14:44:12

github前端

2020-07-22 14:53:06

Linux系統(tǒng)虛擬文件

2020-09-14 10:50:24

WindowsWSL 2Linux

2011-01-13 14:10:30

Linux文件系統(tǒng)

2020-03-23 21:10:03

BashLinux文件系統(tǒng)

2019-09-20 10:04:45

Linux系統(tǒng)虛擬文件

2018-08-24 10:10:25

Linux文件系統(tǒng)技術(shù)

2021-01-18 15:04:53

Linux內(nèi)核開發(fā)者刪除

2021-05-31 07:50:59

Linux文件系統(tǒng)

2013-05-27 14:46:06

文件系統(tǒng)分布式文件系統(tǒng)

2021-06-06 16:55:22

Linux文件系統(tǒng)

2021-04-12 05:44:44

Linux文件系統(tǒng)

2012-09-12 14:40:19

Lustre文件系統(tǒng)

2021-05-31 06:10:14

Btrfs文件系統(tǒng)Linux

2022-07-08 09:00:00

混合云數(shù)據(jù)存儲IT

2010-04-29 10:11:17

Unix系統(tǒng)

2011-03-23 14:00:44

2010-04-30 15:51:48

Unix系統(tǒng)

2009-04-08 15:36:46

LinuxLustre集群文件系統(tǒng)

2020-01-15 09:10:13

LinuxWindowsmacOS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 男人天堂视频在线观看 | 亚洲欧美国产视频 | 日韩精品四区 | 亚洲精品字幕 | 日日噜噜噜夜夜爽爽狠狠视频, | 成人国产精品久久 | 三级视频在线观看 | 国产精品国产 | 极品久久 | 99色综合 | 国产精品久久久久久福利一牛影视 | 日本视频在线播放 | 操操日 | 成人性视频免费网站 | 不卡在线视频 | 在线一级片 | 国产精品国产三级国产aⅴ中文 | 久久一二 | 精品亚洲一区二区 | 精品亚洲91 | 欧洲一级视频 | 在线日韩 | 人人看人人干 | 日韩精品二区 | 日韩成人免费中文字幕 | 久久中文字幕一区 | 国产福利在线 | 亚洲一二三区在线观看 | av免费在线播放 | 色888www视频在线观看 | 欧美日韩精品久久久免费观看 | 日韩精品一区二区三区中文字幕 | 亚洲不卡av在线 | 一级全黄视频 | 成人精品一区二区 | 午夜天堂精品久久久久 | 欧美三级成人理伦 | 亚洲视频中文字幕 | 亚洲综合在线一区 | 午夜精品久久久久久久星辰影院 | 成人亚洲 |