使用 JavaScript 管理 blob 属性和元数据
除 Blob 包含的数据外,它们还支持系统属性和用户定义的元数据。 本文介绍如何使用用于 JavaScript 的 Azure 存储客户端库管理系统属性和用户定义元数据。
先决条件
- 本文中的示例假设你已经设置了一个项目来使用适用于 JavaScript 的 Azure Blob 存储客户端库。 若要了解如何设置项目(包括安装包、导入模块,以及创建授权客户端对象来使用数据资源),请参阅开始使用 Azure Blob 存储和 JavaScript。
- 授权机制必须具有使用 blob 属性或元数据的权限。 若要了解详细信息,请参阅以下 REST API 操作的授权指南:
关于属性和元数据
系统属性:系统属性存在于每个 Blob 存储资源上。 其中一些属性是可以读取或设置的,而另一些属性是只读的。 事实上,有些系统属性与某些标准 HTTP 标头对应。 用于 JavaScript 的 Azure 存储客户端库将维护这些属性。
用户定义的元数据:用户定义元数据包含一个或多个你为 Blob 存储资源指定的名称/值对对。 可以使用元数据存储资源的其他值。 元数据值仅用于你自己的目的,不会影响资源的行为方式。
元数据名称/值对是有效的 HTTP 标头,因此应当遵循所有控制 HTTP 标头的限制。 有关元数据命名要求的详细信息,请参阅元数据名称。
注意
使用 Blob 索引标记,还可以将任意用户定义的键/值属性与 Azure Blob 存储资源一起存储。 虽然与元数据类似,但只会自动为 Blob 索引标记编制索引,并由本机的 blob 服务进行搜索。 除非使用了单独的服务(如 Azure 搜索),否则无法对元数据进行索引和查询。
若要详细了解此功能,请参阅通过 Blob 索引(预览版)管理和查找 Azure Blob 存储上的数据。
设置 blob http 标头
以下代码示例设置 blob 中的 blob HTTP 系统属性。
若要设置 blob 的 HTTP 属性,请创建一个 BlobClient,然后调用 BlobClient.setHTTPHeaders。 查看 BlobHTTPHeaders 属性,以了解要设置的 HTTP 属性。 清除未显式设置的任何属性。
/*
properties= {
blobContentType: 'text/plain',
blobContentLanguage: 'en-us',
blobContentEncoding: 'utf-8',
// all other http properties are cleared
}
*/
async function setHTTPHeaders(blobClient, headers) {
await blobClient.setHTTPHeaders(headers);
console.log(`headers set successfully`);
}
设置元数据
可将元数据指定为 Blob 或容器资源上的一个或多个名称/值对。 若要设置元数据,请创建一个 BlobClient,然后通过它发送一个包含名称/值对的 JSON 对象
以下代码示例在 blob 上设置元数据。
/*
metadata= {
reviewedBy: 'Bob',
releasedBy: 'Jill',
}
*/
async function setBlobMetadata(blobClient, metadata) {
await blobClient.setMetadata(metadata);
console.log(`metadata set successfully`);
}
若要读取元数据,请获取 blob 的属性(如下所示),具体引用 metadata
属性。
获取 Blob 属性
下面的代码示例获取 Blob 的系统属性,包括 HTTP 标头和元数据,并显示这些值。
async function getProperties(blobClient) {
const properties = await blobClient.getProperties();
console.log(blobClient.name + ' properties: ');
for (const property in properties) {
switch (property) {
// nested properties are stringified and returned as strings
case 'metadata':
case 'objectReplicationRules':
console.log(` ${property}: ${JSON.stringify(properties[property])}`);
break;
default:
console.log(` ${property}: ${properties[property]}`);
break;
}
}
}
这些 console.log 行的输出如下所示:
my-blob.txt properties:
lastModified: Thu Apr 21 2022 13:02:53 GMT-0700 (Pacific Daylight Time)
createdOn: Thu Apr 21 2022 13:02:53 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: "0x8DA23D1EBA8E607"
contentMD5: undefined
contentEncoding: utf-8
contentDisposition: undefined
contentLanguage: en-us
cacheControl: undefined
blobSequenceNumber: undefined
clientRequestId: 58da0441-7224-4837-9b4a-547f9a0c7143
requestId: 26acb38a-001e-0046-27ba-55ef22000000
version: 2021-04-10
date: Thu Apr 21 2022 13:02:52 GMT-0700 (Pacific Daylight Time)
acceptRanges: bytes
blobCommittedBlockCount: 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 存储客户端库来管理系统属性和用户定义的元数据,请参阅以下资源。
REST API 操作
Azure SDK for JavaScript 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 JavaScript 范例与 REST API 操作进行交互。 用于管理系统属性和用户定义的元数据的客户端库方法使用以下 REST API 操作:
- 设置 Blob 属性 (REST API)
- 获取 Blob 属性 (REST API)
- 设置 Blob 元数据 (REST API)
- 获取 Blob 元数据 (REST API)