仅从 Azure 存储中的 Blob 列表获取特定元数据 [Azure-Blob][REST]
Get specific metadata only from List of Blobs in Azure Storage [Azure-Blob][REST]
我通过此代码在 Azure Blob 中通过 REST 调用成功获得了容器中的 Blob 列表。
const request = require("request");
require("dotenv").config();
const account = process.env.ACCOUNT_NAME || "";
const key = process.env.ACCOUNT_KEY || "";
var strTime = new Date().toUTCString();
const containerName = "demo";
const BearerToken = <BearerToken>;
const options = {
url: `https://${account}.blob.core.windows.net/${containerName}?comp=list&restype=container`,
headers: {
Authorization: `Bearer ${BearerToken}`,
"x-ms-date": strTime, //var strTime = new Date().toUTCString();
"x-ms-version": "2019-02-02", // Stable xms vesrion
},
};
function callback(error, response, body) {
console.log(response.body);
}
request(options, callback);
代码的输出:
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ServiceEndpoint="https://<storageaccount>.blob.core.windows.net/" ContainerName="demo">
<Blobs>
<Blob>
<Name>
Mayank Photo.jpg
</Name>
<Properties>
<Creation-Time>
Fri, 12 Mar 2021 09:09:32 GMT
</Creation-Time>
<Last-Modified>
Fri, 12 Mar 2021 09:09:32 GMT
</Last-Modified>
<Etag>
0x8D8E5368CBE80AB
</Etag>
<Content-Length>
16685
</Content-Length>
<Content-Type>
image/jpeg
</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-CRC64 />
<Content-MD5>
AIoyEnG9amzFlWZ7t1YlCw==
</Content-MD5>
<Cache-Control />
<Content-Disposition />
<BlobType>
BlockBlob
</BlobType>
<AccessTier>
Hot
</AccessTier>
<AccessTierInferred>
true
</AccessTierInferred>
<LeaseStatus>
unlocked
</LeaseStatus>
<LeaseState>
available
</LeaseState>
<ServerEncrypted>
true
</ServerEncrypted>
</Properties>
</Blob>
<Blob>
<Name>
MayankPhoto.jpg
</Name>
<Properties>
<Creation-Time>
Fri, 12 Mar 2021 09:10:28 GMT
</Creation-Time>
<Last-Modified>
Fri, 12 Mar 2021 09:10:28 GMT
</Last-Modified>
<Etag>
0x8D8E536AE20F3A1
</Etag>
<Content-Length>
16685
</Content-Length>
<Content-Type>
image/jpeg
</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-CRC64 />
<Content-MD5>
AIoyEnG9amzFlWZ7t1YlCw==
</Content-MD5>
<Cache-Control />
<Content-Disposition />
<BlobType>
BlockBlob
</BlobType>
<AccessTier>
Hot
</AccessTier>
<AccessTierInferred>
true
</AccessTierInferred>
<LeaseStatus>
unlocked
</LeaseStatus>
<LeaseState>
available
</LeaseState>
<ServerEncrypted>
true
</ServerEncrypted>
</Properties>
</Blob>
</Blobs>
<NextMarker />
</EnumerationResults>
如您所见,除了 blob 名称外,还有许多其他 fields/metadata 返回,有没有办法在输出中仅获取某些特定的元数据字段,例如:文件名、创建日期、ContentLength。
因为有时我可能会遇到很长的文件列表,所以我需要一个简短而快速的响应。
我认为它可能与包含指定 here 中的元数据 URL 参数有关,但我不知道如何相应地修改我的 URL。
在documentation中提到了,你只需要将它作为
https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list&include=snapshots&include=metadata
您列出的属性是 blob 的系统属性,它们将被默认 returned。无法过滤这些属性并要求 Blob 存储服务 return 其中一些属性。
Blob 可以具有默认情况下未 return 的其他属性。其中之一是用户定义的元数据。要获取用户定义的元数据,您需要在请求中添加 include=metadata
。其他这样的 属性 是复制属性(即,是否由于复制操作而创建了 blob 的信息)。要查看副本信息,您需要在请求中添加 include=copy
。
我通过此代码在 Azure Blob 中通过 REST 调用成功获得了容器中的 Blob 列表。
const request = require("request");
require("dotenv").config();
const account = process.env.ACCOUNT_NAME || "";
const key = process.env.ACCOUNT_KEY || "";
var strTime = new Date().toUTCString();
const containerName = "demo";
const BearerToken = <BearerToken>;
const options = {
url: `https://${account}.blob.core.windows.net/${containerName}?comp=list&restype=container`,
headers: {
Authorization: `Bearer ${BearerToken}`,
"x-ms-date": strTime, //var strTime = new Date().toUTCString();
"x-ms-version": "2019-02-02", // Stable xms vesrion
},
};
function callback(error, response, body) {
console.log(response.body);
}
request(options, callback);
代码的输出:
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ServiceEndpoint="https://<storageaccount>.blob.core.windows.net/" ContainerName="demo">
<Blobs>
<Blob>
<Name>
Mayank Photo.jpg
</Name>
<Properties>
<Creation-Time>
Fri, 12 Mar 2021 09:09:32 GMT
</Creation-Time>
<Last-Modified>
Fri, 12 Mar 2021 09:09:32 GMT
</Last-Modified>
<Etag>
0x8D8E5368CBE80AB
</Etag>
<Content-Length>
16685
</Content-Length>
<Content-Type>
image/jpeg
</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-CRC64 />
<Content-MD5>
AIoyEnG9amzFlWZ7t1YlCw==
</Content-MD5>
<Cache-Control />
<Content-Disposition />
<BlobType>
BlockBlob
</BlobType>
<AccessTier>
Hot
</AccessTier>
<AccessTierInferred>
true
</AccessTierInferred>
<LeaseStatus>
unlocked
</LeaseStatus>
<LeaseState>
available
</LeaseState>
<ServerEncrypted>
true
</ServerEncrypted>
</Properties>
</Blob>
<Blob>
<Name>
MayankPhoto.jpg
</Name>
<Properties>
<Creation-Time>
Fri, 12 Mar 2021 09:10:28 GMT
</Creation-Time>
<Last-Modified>
Fri, 12 Mar 2021 09:10:28 GMT
</Last-Modified>
<Etag>
0x8D8E536AE20F3A1
</Etag>
<Content-Length>
16685
</Content-Length>
<Content-Type>
image/jpeg
</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-CRC64 />
<Content-MD5>
AIoyEnG9amzFlWZ7t1YlCw==
</Content-MD5>
<Cache-Control />
<Content-Disposition />
<BlobType>
BlockBlob
</BlobType>
<AccessTier>
Hot
</AccessTier>
<AccessTierInferred>
true
</AccessTierInferred>
<LeaseStatus>
unlocked
</LeaseStatus>
<LeaseState>
available
</LeaseState>
<ServerEncrypted>
true
</ServerEncrypted>
</Properties>
</Blob>
</Blobs>
<NextMarker />
</EnumerationResults>
如您所见,除了 blob 名称外,还有许多其他 fields/metadata 返回,有没有办法在输出中仅获取某些特定的元数据字段,例如:文件名、创建日期、ContentLength。 因为有时我可能会遇到很长的文件列表,所以我需要一个简短而快速的响应。
我认为它可能与包含指定 here 中的元数据 URL 参数有关,但我不知道如何相应地修改我的 URL。
在documentation中提到了,你只需要将它作为
https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list&include=snapshots&include=metadata
您列出的属性是 blob 的系统属性,它们将被默认 returned。无法过滤这些属性并要求 Blob 存储服务 return 其中一些属性。
Blob 可以具有默认情况下未 return 的其他属性。其中之一是用户定义的元数据。要获取用户定义的元数据,您需要在请求中添加 include=metadata
。其他这样的 属性 是复制属性(即,是否由于复制操作而创建了 blob 的信息)。要查看副本信息,您需要在请求中添加 include=copy
。