本文說明如何使用適用於 JavaScript 的 Azure 儲存體用戶端程式庫來列出 Blob。
必要條件
- 本文中的範例假設您已設定專案,以搭配使用適用於 JavaScript 的 Azure Blob 儲存體用戶端程式庫。 若要了解設定專案,包括套件安裝、匯入模組,以及建立授權的用戶端物件來處理資料資源,請參閱開始使用 Azure Blob 儲存體和 JavaScript。
- 授權機制必須具有列出 Blob 的權限。 若要深入了解,請參閱下列 REST API 作業的授權指引:
關於 Blob 清單選項
當您從程式代碼列出 Blob 時,您可以指定數個選項來管理從 Azure 儲存體 傳回結果的方式。 您可指定要在每一組結果中傳回的結果數目,然後擷取後續集合。 您可以指定前置詞,以傳回名稱以該字元或字串開頭的 Blob。 您也可以用簡單清單結構列出 Blob,或以階層方式列出 Blob。 階層式清單會透過將 Blob 組織成資料夾的方式傳回 Blob。
若要以平面方式列出容器中的 Blob,請呼叫下列方法:
若要使用階層式清單列出容器中的 Blob,請呼叫下列方法:
- ContainerClient.listBlobsByHierarchy
管理傳回的結果數目
根據預設,列出作業一次最多會傳回 5000 個結果,但您可以指定要讓每個列出作業傳回的結果數目。 本文中顯示的範例會說明如何在頁面中傳回結果。 若要深入了解分頁概念,請參閱使用 Azure SDK for JavaScript 進行分頁。
使用前置詞篩選結果
若要篩選 blob 清單,請在 ContainerListBlobsOptions 中為 prefix 屬性指定字串。 前置詞字串可包含一或多個字元。 Azure 儲存體 只會回傳以該前綴開頭的 blob。 例如,傳遞前置詞字串 sample-,只會傳回其名稱開頭為 sample- 的 Blob。
包含 Blob 中繼資料或其他資訊
若要在結果中包含 Blob 元數據,請將 includeMetadata 屬性true設定為 ContainerListBlobsOptions 的一部分。 您也可以將適當的屬性設定為 true,在結果中包含快照集、標記或版本。
簡單列表與階層式清單
Azure 儲存體中的 Blob 是以簡單架構進行組織,而不是階層式架構 (例如傳統檔案系統)。 不過,你可以將 blobs 組織成 虛擬目錄 ,模擬資料夾結構。 虛擬目錄會形成 Blob 名稱的一部分,並以分隔符號表示。
若要將 Blob 組織成虛擬目錄,請在 Blob 名稱中使用分隔符號。 預設的分隔符號是正斜線 (/),但可指定任何字元作為分隔符號。
如果您使用分隔符號為 Blob 命名,則可以選擇以階層方式列出 Blob。 對於階層式清單作業,Azure 儲存體會傳回父物件下方的任何虛擬目錄和 Blob。 您可遞迴呼叫清單作業來周遊階層,類似於以程式設計方式周遊傳統檔案系統的方式。
使用簡單列表
根據預設,清單作業會以簡單清單傳回 Blob。 在簡單清單中,Blob 不會依虛擬目錄加以組織。
以下範例透過平面列表列出指定容器中的斑點。 如果 Blob 快照集和 Blob 元數據存在,則此範例包含 Blob 快照集和 Blob 元數據:
async function listBlobsFlat(containerClient) {
const maxPageSize = 2;
// Some options for filtering results
const listOptions = {
includeMetadata: true,
includeSnapshots: true,
prefix: '' // Filter results by blob name prefix
};
console.log("Blobs flat list (by page):");
for await (const response of containerClient
.listBlobsFlat(listOptions)
.byPage({ maxPageSize })) {
console.log("- Page:");
if (response.segment.blobItems) {
for (const blob of response.segment.blobItems) {
console.log(` - ${blob.name}`);
}
}
}
}
範例輸出類似於:
Blobs flat list (by page):
- Page:
- a1
- a2
- Page:
- folder1/b1
- folder1/b2
- Page:
- folder2/sub1/c
- folder2/sub1/d
注意
所示的範例輸出是假設您有一個採用扁平命名空間的儲存體帳戶。 如果你啟用了儲存帳號的階層命名空間功能,目錄就不是虛擬的。 相反地,它們是具體且獨立的物件。 因此,目錄會以零長度 Blob 的形式出現在清單中。
如需使用階層命名空間時的替代清單選項,請參閱列出目錄內容 (Azure Data Lake Storage)。
使用階層式清單
當以階層方式呼叫清單作業時,Azure 儲存體會傳回階層第一層級的虛擬目錄和 Blob。
若要以階層方式列出 Blob,請使用下列方法:
下列範例使用階層式清單列出所指定容器中的 Blob。 在此範例中,前置詞參數一開始會設定為空字串,以列出容器中的所有 Blob。 接著,此範例會以遞迴方式呼叫列出作業,以逐一周遊虛擬目錄階層並列出 Blob。
// Recursively list virtual folders and blobs
async function listBlobHierarchical(containerClient, delimiter='/') {
const maxPageSize = 20;
// Some options for filtering list
const listOptions = {
prefix: '' // Filter results by blob name prefix
};
let i = 1;
console.log(`Folder ${delimiter}`);
for await (const response of containerClient
.listBlobsByHierarchy(delimiter, listOptions)
.byPage({ maxPageSize })) {
console.log(` Page ${i++}`);
const segment = response.segment;
if (segment.blobPrefixes) {
// Do something with each virtual folder
for await (const prefix of segment.blobPrefixes) {
// Build new delimiter from current and next
await listBlobHierarchical(containerClient, `${delimiter}${prefix.name}`);
}
}
for (const blob of response.segment.blobItems) {
// Do something with each blob
console.log(`\tBlobItem: name - ${blob.name}`);
}
}
}
範例輸出類似於:
Folder /
Page 1
BlobItem: name - a1
BlobItem: name - a2
Page 2
Folder /folder1/
Page 1
BlobItem: name - folder1/b1
BlobItem: name - folder1/b2
Folder /folder2/
Page 1
Folder /folder2/sub1/
Page 1
BlobItem: name - folder2/sub1/c
BlobItem: name - folder2/sub1/d
Page 2
BlobItem: name - folder2/sub1/e
注意
Blob 快照無法在階層式列出作業中列出。
以 Apache Arrow 格式列出 Blob (預覽)
Important
Apache Arrow 格式的 blob 列表目前處於 預覽階段。 此情境需要 JavaScript 的 Azure Blob 儲存體 用戶端函式庫的測試版(預覽版)使用(例如 @azure/storage-blob12.34.0-beta.1 或更新版本)。 預覽功能是在沒有服務等級合約的情況下提供的,不建議用於生產工作負載。 有些功能可能不支援,或功能有限。 欲了解更多資訊,請參閱 Microsoft Azure 預覽版補充使用條款。
此功能建立在現有 List Blobs API 之上。 它不是使用預設的 XML,而是使用精簡的欄式 Apache Arrow 格式作為線上傳輸的回應格式。 你可以在容器列表呼叫中設定一個選項來啟用它。 JavaScript SDK 會在幕後解碼 Apache Arrow,並且仍會回傳相同的 Blob 項目物件。 此方法提升列表吞吐量,並在列舉大型容器時減少客戶端 CPU。 它保留了應用程式所依賴的回應合約。
Warning
在已啟用階層式命名空間(Azure Data Lake Storage)的儲存體帳戶上,不支援以 Apache Arrow 格式列出 Blob。
要請求 Apache Arrow 格式的結果,請將 responseFormat 列出選項的屬性設為 StorageResponseFormat.Arrow,然後將選項傳給 ContainerClient.listBlobsFlat。 從 StorageResponseFormat 匯入 @azure/storage-blob 列舉。
以下範例列出容器中的 blob,並以 Apache Arrow 格式請求結果:
const { StorageResponseFormat } = require("@azure/storage-blob");
const options = {
prefix: "FolderA/",
responseFormat: StorageResponseFormat.Arrow,
};
for await (const blob of containerClient.listBlobsFlat(options)) {
console.log("Blob name: " + blob.name);
}
資源
想了解如何使用 Azure Blob 儲存體 用戶端函式庫(JavaScript)來列出 blob,請參閱以下資源。
程式碼範例
- 在 GitHub 上查看本文中的 JavaScript 與 TypeScript 程式碼範例。
REST API 操作
Azure SDK for JavaScript 包含建立在 Azure REST API 之上的函式庫。 透過使用這些函式庫,你可以透過熟悉的 JavaScript 範式與 REST API 操作互動。 用來列出 Blob 的用戶端程式庫方法會使用下列 REST API 作業:
- 列出 Blob 清單 (REST API)