仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据

Posted

技术标签:

【中文标题】仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据【英文标题】:Get specific metadata only from List of Blobs in Azure Storage [Azure-Blob][REST] 【发布时间】:2021-06-22 23:44:15 【问题描述】:

我能够通过此代码通过 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 名称之外,还有许多其他字段/元数据返回,有没有一种方法可以在输出中仅获取某些特定的元数据字段,例如:文件名、DateCreated、ContentLength。 因为有时我可能会遇到一长串文件,在这种情况下我需要一个简短而快速的响应。

我认为它可能与包含指定 here 中的元数据 URL 参数有关,但我不知道如何相应地修改我的 URL。

【问题讨论】:

在可选参数include=snapshots,metadata,uncommittedblobs,copy,deleted,tags,versions 【参考方案1】:

您列出的属性是 blob 的系统属性,它们将默认返回。无法过滤这些属性并要求 Blob 存储服务返回其中一些属性。

Blob 可以具有默认情况下不返回的其他属性。其中之一是用户定义的元数据。要获取用户定义的元数据,您需要在请求中添加 include=metadata。其他此类属性是复制属性(即,如果作为复制操作的结果创建了 blob 的信息)。要查看副本信息,您需要在请求中添加include=copy

【讨论】:

【参考方案2】:

documentation中提到了,你只要把它当做就行了

https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list&include=snapshots&include=metadata  

【讨论】:

以上是关于仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 AD 令牌/承载令牌 [Azure-Blob][Bearer-Token] 在 Azure Blob 中放置文件时授权权限不匹配

仅从 git 存储库中克隆特定版本

powershell Git,GitHub:仅从存储库中删除目录

在存储过程中使用表变量而不是仅从表或视图中选择?

YDN-DB 仅从我的 IndexedDb 存储中获取前 100 行

使用 Google Cloud Functions Node JS 10 仅从特定存储桶目录复制事件驱动的文件