跳到主要內容

管理資料夾預覽

DID Space 允許您為任何資料夾設定自訂預覽。此功能讓您能夠定義資料夾在應用程式中的呈現方式,將簡單的檔案列表轉變為豐富的互動式體驗,例如畫廊、文件預覽,甚至是迷你應用程式。這是透過資料夾 .meta 目錄中一個特殊的 preview.yml 檔案來管理。

本指南將引導您使用 SDK 管理資料夾預覽的三個主要操作:

  • 設定預覽:在單一操作中建立或更新資料夾的預覽設定,並上傳其相關資產(例如 index.html、CSS、JavaScript 檔案)。
  • 擷取預覽:取得特定資料夾的預覽設定。
  • 刪除預覽:從資料夾中移除自訂預覽。

設定資料夾預覽

若要設定或更新資料夾預覽,您需要使用 PutPreviewObjectCommand。這個強大的指令不僅會寫入 preview.yml 設定,還會上傳預覽所需的所有必要資源檔案(如 HTML、CSS 和 JS)。

輸入參數

  • key string (required) — 資料夾的路徑。必須以結尾斜線 (/) 結束。
  • data PreviewTemplate (required) — 包含預覽設定的物件。此物件將被轉換為 YAML 並儲存在 .meta/preview.yml 中。
  • name string (required) — 預覽的名稱。
  • description string — 預覽的簡短描述。
  • entry string (required) — 預覽的進入點檔案,通常是 index.html 檔案。
  • resources PutObjectCommandInput[] (default: []) — 作為預覽一部分上傳的檔案物件陣列。每個資源的 key 都必須以資料夾的 key 作為前綴。
  • metadata object (default: {}) — 與預覽關聯的自訂元資料記錄。
  • hash string — 物件的 IPFS CID v1 雜湊值,用於資料完整性驗證。

範例

以下範例示範如何為名為 my-gallery/ 的資料夾建立一個簡單的 HTML 預覽。我們將隨預覽設定一同上傳一個 index.html 和一個 style.css 檔案。

Set a Folder Preview

typescript
import { SpaceClient, PutPreviewObjectCommand } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';

async function setFolderPreview() {
  const wallet = getWallet();
  const client = new SpaceClient({
    endpoint: 'https://www.didspaces.com/app/api/space/...',
    wallet,
  });

  const folderKey = 'my-gallery/';

  const input = {
    key: folderKey,
    // 這個 'data' 物件將成為 '.meta/preview.yml' 的內容
    data: {
      name: 'My Image Gallery',
      description: 'A simple preview for my image collection.',
      entry: 'index.html', // 預覽的進入點
    },
    // 在同一個指令中上傳預覽資產
    resources: [
      {
        key: `${folderKey}index.html`,
        body: Buffer.from(
          '<!DOCTYPE html><html><head><link rel="stylesheet" href="style.css"></head><body><h1>Welcome to My Gallery</h1></body></html>'
        ),
        contentType: 'text/html',
      },
      {
        key: `${folderKey}style.css`,
        body: Buffer.from('body { background-color: #f0f0f0; color: #333; }'),
        contentType: 'text/css',
      },
    ],
  };

  const command = new PutPreviewObjectCommand(input);
  const output = await client.send(command);

  if (output.statusCode === 200) {
    console.log('Successfully set folder preview!');
  } else {
    console.error('Failed to set folder preview:', output.statusMessage);
  }
}

setFolderPreview();

此指令執行後,my-gallery/ 資料夾將會有一個 .meta/preview.yml 檔案,並包含 index.htmlstyle.css

擷取資料夾預覽

若要取得現有資料夾預覽的設定,請使用 GetPreviewObjectCommand。此指令會讀取 .meta/preview.yml 檔案並回傳其解析後的內容。

輸入參數

  • key string (required) — 資料夾的路徑。必須以結尾斜線 (/) 結束。

輸出

指令的輸出在 data 屬性中包含已解析的 PreviewTemplate 物件。

  • data PreviewTemplate — .meta/preview.yml 檔案的解析後內容。

範例

Get a Folder Preview

typescript
import { SpaceClient, GetPreviewObjectCommand } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';

async function getFolderPreview() {
  const wallet = getWallet();
  const client = new SpaceClient({
    endpoint: 'https://www.didspaces.com/app/api/space/...',
    wallet,
  });

  const command = new GetPreviewObjectCommand({ key: 'my-gallery/' });
  const output = await client.send(command);

  if (output.statusCode === 200) {
    console.log('Preview configuration:', output.data);
  } else {
    console.error('Failed to get folder preview:', output.statusMessage);
  }
}

getFolderPreview();

範例回應

如果指令成功,output.data 看起來會像這樣:

Example Response

json
{
  "name": "My Image Gallery",
  "description": "A simple preview for my image collection.",
  "entry": "index.html"
}

刪除資料夾預覽

如果您想移除自訂預覽並將資料夾還原為其預設外觀,請使用 DeletePreviewObjectCommand。此指令會刪除 .meta/preview.yml 檔案,但不會影響資料夾中的任何其他檔案,包括您可能已上傳的資源檔案。

輸入參數

  • key string (required) — 資料夾的路徑。必須以結尾斜線 (/) 結束。

範例

Delete a Folder Preview

typescript
import { SpaceClient, DeletePreviewObjectCommand } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';

async function deleteFolderPreview() {
  const wallet = getWallet();
  const client = new SpaceClient({
    endpoint: 'https://www.didspaces.com/app/api/space/...',
    wallet,
  });

  const command = new DeletePreviewObjectCommand({ key: 'my-gallery/' });
  const output = await client.send(command);

  if (output.statusCode === 200) {
    console.log('Successfully deleted folder preview!');
  } else {
    console.error('Failed to delete folder preview:', output.statusMessage);
  }
}

deleteFolderPreview();

透過使用這三個指令,您可以完全管理自訂資料夾預覽,以便在您的 DID Space 驅動的應用程式中創造更豐富、更具吸引力的使用者體驗。