次の方法で共有


JavaScript を使用して BLOB を一覧表示する

この記事では、JavaScript 用の Azure Storage クライアント ライブラリを使用して BLOB を一覧表示する方法について説明します。

前提条件

  • この記事の例では、JavaScript 用の Azure Blob Storage クライアント ライブラリを操作するように設定されたプロジェクトが、既にあることを前提としています。 パッケージのインストール、モジュールのインポート、データ リソースの操作が認可されたクライアント オブジェクトの作成など、プロジェクトの設定については、「Azure Blob Storage および JavaScript の概要」を参照してください。
  • 認可メカニズムには、BLOB を一覧表示するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。

BLOB の一覧表示オプションについて

BLOB をコードから一覧表示する際に、Azure Storage から結果を返す方法を管理するための複数のオプションを指定できます。 各結果セットで返す結果の数を指定し、後続のセットを取得できます。 名前がその文字または文字列から始まる BLOB を返すようにプレフィックスを指定できます。 また、フラット リスト構造 (階層) で BLOB を一覧表示できます。 階層リストでは、フォルダーに整理されたかのように BLOB が返されます。

フラット リストを使用してコンテナー内の BLOB を一覧表示するには、次のメソッドを呼び出します。

階層リストを使用してコンテナー内の BLOB を一覧表示するには、次のメソッドを呼び出します。

返される結果の数を管理する

既定では、一覧表示操作から一度に最大 5,000 件の結果が返されますが、各一覧表示操作で返される結果の数は指定できます。 この記事の例は、結果をページに返す方法を示しています。 改ページの概念の詳細は、「Azure SDK for JavaScript を使用した改ページ」をご覧ください。

プレフィックスを使用して結果をフィルター処理する

BLOB の一覧をフィルター処理するには、ContainerListBlobsOptionsprefix プロパティに文字列を指定します。 プレフィックス文字列には、1 つ以上の文字を含めることができます。 Azure Storage は、名前がそのプレフィックスで始まる BLOB だけを返します。 たとえば、プレフィックス文字列 sample- を渡すと、名前が sample- で始まる BLOB のみが返されます。

BLOB メタデータまたはその他の情報を含める

結果に BLOB メタデータを含めるには、includeMetadata プロパティを ContainerListBlobsOptions の一部として true に設定します。 適切なプロパティを true に設定することで、結果にスナップショット、タグ、またはバージョンを含めることもできます。

フラットな一覧表示と階層的な一覧表示

Azure Storage の BLOB は、(従来のファイル システムのような) 階層的なパラダイムではなく、フラットなパラダイムで組織化されます。 ただし、フォルダー構造を模倣するために、BLOB を仮想ディレクトリに組織化することができます。 仮想ディレクトリは BLOB 名の一部を形成し、区切り文字によって示されます。

BLOB を仮想ディレクトリに組織化するには、BLOB 名に区切り文字を使用します。 既定の区切り文字はスラッシュ (/) ですが、区切り文字として任意の文字を指定できます。

区切り記号を使用して BLOB に名前を付ける場合、BLOB を階層的に一覧表示することを選択できます。 階層的な一覧表示操作の場合、Azure Storage は、親オブジェクトの下にあるすべての仮想ディレクトリと 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

Note

次に示すサンプル出力では、フラット型名前空間を持つストレージ アカウントがあることを前提としています。 ストレージ アカウントで階層型名前空間の機能を有効にしている場合、ディレクトリは仮想ではありません。 そうではなく、具象の独立したオブジェクトです。 その結果、ディレクトリは長さ 0 の BLOB として一覧に表示されます。

階層型名前空間を使って作業する場合の別のリスト オプションについては、「ディレクトリの内容を一覧表示する (Azure Data Lake Storage)」を参照してください。

階層的な一覧表示を使用する

一覧表示操作を階層的に呼び出すと、Azure Storage は、階層の最初のレベルに仮想ディレクトリと 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

Note

BLOB のスナップショットは、階層的な一覧表示操作では一覧表示できません。

リソース

JavaScript 用 Azure Blob Storage クライアント ライブラリを使用して BLOB を一覧表示する方法について詳しくは、次のリソースを参照してください。

コード サンプル

  • こちらの記事 (GitHub) の JavaScriptTypeScript のコード サンプルを参照してください

REST API の操作

Azure SDK for JavaScript には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた JavaScript パラダイムを通じて REST API 操作を利用できます。 BLOB を一覧表示するためのクライアント ライブラリ メソッドは、次の REST API 操作を使用します。

クライアント ライブラリのリソース

こちらもご覧ください