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 操作を使用します。
- Set Blob Properties (REST API)
- Get Blob Properties (REST API)
- Set Blob Metadata (REST API)
- Get Blob Metadata (REST API)