TypeScript を使って BLOB プロパティとメタデータを管理する

BLOB コンテナーは、そこに含まれているデータに加えて、システム プロパティとユーザー定義メタデータをサポートしています。 この記事では、JavaScript 用 Azure Storage クライアント ライブラリを使用して、システム プロパティとユーザー定義メタデータを管理する方法について説明します。

前提条件

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

プロパティとメタデータについて

  • システムのプロパティ:システム プロパティは、各 BLOB ストレージ リソース上に存在します。 このようなプロパティには、読み取りまたは設定可能なものもありますが、読み取り専用のものもあります。 実際には、システムのプロパティの一部は、特定の標準 HTTP ヘッダーに対応しています。 JavaScript 用 Azure Storage クライアント ライブラリでは、これらのプロパティがユーザーに代わって保持されます。

  • ユーザー定義のメタデータ: ユーザー定義メタデータは、BLOB ストレージ リソースに対して指定された 1 つ以上の名前と値のペアで構成されます。 メタデータを使用すると、リソースに関する追加の値を格納できます。 メタデータ値は独自の目的にのみ使用され、リソースの動作には影響しません。

    メタデータ名/値ペアは有効な HTTP ヘッダーであり、HTTP ヘッダーに適用されるすべての制約に準拠する必要があります。 メタデータの名前付けの要件について詳しくは、「メタデータ名」をご覧ください。

注意

また、BLOB インデックス タグを使用して、ユーザー定義の任意のキーまたは値の属性を Azure Blob Storage リソースと共に格納することもできます。 メタデータに似ていますが、BLOB インデックス タグにのみ自動的にインデックスが付けられて、ネイティブの BLOB サービスによって検索可能になります。 Azure Search などの別のサービスを使用する場合を除き、メタデータにインデックスを付けてクエリを実行することはできません。

この機能の詳細については、「BLOB インデックスを使用して Azure Blob Storage でデータを管理および検索する (プレビュー)」を参照してください。

BLOB HTTP ヘッダーを設定する

次のコード例では、BLOB で BLOB HTTP システム プロパティが設定されます。

BLOB の HTTP プロパティを設定するには、BlobClient を作成してから、BlobClient.setHTTPHeaders を呼び出します。 BlobHTTPHeaders プロパティを確認して、設定する HTTP プロパティを確かめます。 明示的に設定されていない HTTP プロパティは消去されます。

async function setHTTPHeaders(blobClient: BlobClient, headers): Promise<void> {
  /*
  headers= {
      blobContentType: 'text/plain',
      blobContentLanguage: 'en-us',
      blobContentEncoding: 'utf-8',
      // all other http properties are cleared
    }
  */

  const headerResults = await blobClient.setHTTPHeaders(headers);

  if (!headerResults.errorCode) {
    console.log(`headers set successfully ${headerResults.date}`);
  }
}

セットのメタデータ

メタデータは、BLOB またはコンテナーのリソースで 1 つ以上の名前と値のペアとして指定できます。 メタデータを設定するには、BlobClient を作成してから、名前と値のペアの JSON オブジェクトを送信します

次のコード例では、BLOB でメタデータを設定します。

async function setBlobMetadata(
  blobClient: BlobClient,
  metadata: Metadata
): Promise<void> {
  /*
    metadata= {
        reviewedBy: 'Bob',
        releasedBy: 'Jill',
    }
*/
  const metadataResults = await blobClient.setMetadata(metadata);

  if (!metadataResults.errorCode) {
    console.log(`metadata set successfully ${metadataResults.date}`);
  }
}

メタデータを読み取るには、metadata プロパティを参照している BLOB のプロパティ (以下を参照) を取得します。

BLOB のプロパティを取得する

次のコード例では、HTTP ヘッダーとメタデータを含む BLOB のシステム プロパティが取得され、それらの値が表示されます。

async function getProperties(blobClient: BlobClient): Promise<void> {
  const propertiesResponse: BlobGetPropertiesResponse =
    await blobClient.getProperties();

  if (!propertiesResponse.errorCode) {
    console.log(blobClient.name + ' properties: ');

    for (const property in propertiesResponse) {
      switch (property) {
        // nested properties are stringified and returned as strings
        case 'metadata':
        case 'objectReplicationRules':
          console.log(
            `    ${property}: ${JSON.stringify(propertiesResponse[property])}`
          );
          break;
        default:
          console.log(`    ${property}: ${propertiesResponse[property]}`);
          break;
      }
    }
  }
}

BLOB プロパティには以下を含めることができます。

lastModified: Mon Mar 20 2023 11:04:17 GMT-0700 (Pacific Daylight Time)
createdOn: Mon Mar 20 2023 11:04:17 GMT-0700 (Pacific Daylight Time)
metadata: {"releasedby":"Jill","reviewedby":"Bob"}
objectReplicationPolicyId: undefined
objectReplicationRules: {}
blobType: BlockBlob
copyCompletedOn: undefined
copyStatusDescription: undefined
copyId: undefined
copyProgress: undefined
copySource: undefined
copyStatus: undefined
isIncrementalCopy: undefined
destinationSnapshot: undefined
leaseDuration: undefined
leaseState: available
leaseStatus: unlocked
contentLength: 19
contentType: text/plain
etag: "0x8DB296D85EED062"
contentMD5: undefined
isServerEncrypted: true
encryptionKeySha256: undefined
encryptionScope: undefined
accessTier: Hot
accessTierInferred: true
archiveStatus: undefined
accessTierChangedOn: undefined
versionId: undefined
isCurrentVersion: undefined
tagCount: undefined
expiresOn: undefined
isSealed: undefined
rehydratePriority: undefined
lastAccessed: undefined
immutabilityPolicyExpiresOn: undefined
immutabilityPolicyMode: undefined
legalHold: undefined
errorCode: undefined
body: true
_response: [object Object]
objectReplicationDestinationPolicyId: undefined
objectReplicationSourceProperties:

リソース

JavaScript 用 Azure Blob Storage クライアント ライブラリを使用して、システム プロパティとユーザー定義メタデータを管理する方法の詳細については、次のリソースを参照してください。

REST API の操作

Azure SDK for JavaScript には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた JavaScript パラダイムを通じて REST API 操作を利用できます。 システム プロパティとユーザー定義メタデータを管理するためのクライアント ライブラリ メソッドでは、次の REST API 操作を使用します。

コード サンプル

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