导出 (0) 打印
全部展开

枚举 Blob 资源

更新时间: 2013年4月

Blob 服务 API 包括用于枚举帐户中的容器的操作(列出容器 (REST API)操作)以及枚举容器中的 Blob 的操作(列出 Blob (REST API) 操作)。这些操作具有一些值得注意的共同特征。

枚举操作将返回 XML 响应,其中包含请求列表的全部或部分内容。此操作按字母顺序返回实体。

本主题包含以下子主题:

设置最大结果数

检索包含标记的部分列表结果

筛选列表结果

遍历 Blob 命名空间

XML 响应格式

要指定在单个枚举操作调用中返回的最大结果数,请在请求 URI 上指定 maxresults 参数的值。

如果未在请求中指定最大结果数或者最大结果数大于 5,000 个,服务器最多返回 5,000 个项。如果指定的最大结果数小于或等于 0,服务将返回状态代码 400(错误的请求)。

首次针对特定资源执行枚举操作时,响应可能包含全部结果,也可能包含一部分结果和标记值。可以将标记值传递给后续调用以返回下一组结果(依此类推),直到列表是完整的而不再返回标记。

标记值包含在 XML 响应的 NextMarker 元素中。如果 NextMarker 元素是空的,则列表是完整的。NextMarker 值是一个对客户端不透明的字符串值。

要在后续操作中返回下一组结果,请将 NextMarker 标记中返回的值作为请求 URI 上的 marker 参数传递。

  • 可以通过使用 prefix 参数指定请求上的前缀字符串来筛选结果列表。然后,列表操作将返回名称以该前缀开头的实体。如果在请求 URI 上指定了 prefix 参数,响应 XML 将包括 Prefix 元素,其中包含一个或多个前缀字符。例如,如果指定具有“c”值的前缀,则会在响应 XML 中返回 <Prefix>c</Prefix>。有关示例,请参阅本主题后面的容器列表部分。

列出 Blob (REST API) 操作具有一个额外的 delimiter 参数,允许调用者使用用户配置的分隔符遍历 Blob 命名空间。分隔符可以是单个字符或字符串。如果请求包含该参数,此操作将返回 BlobPrefix 元素。返回的 BlobPrefix 元素将替代名称以相同子字符串开头的所有 Blob,直到出现分隔符字符。BlobPrefix 元素的值是 substring+delimiter,其中 substring 是以一个或多个 Blob 名称开头的通用子字符串,而 delimiterdelimiter 参数的值。

可以通过为请求 URI 上的 prefix 参数指定 BlobPrefix 值,使用 BlobPrefix 值进行后续调用以列出以该前缀开头的 Blob。这样,您就可以遍历 Blob 的虚拟层次结构,就好像它是文件系统一样。有关示例,请参阅本主题后面的分隔的 Blob 列表示例。

请注意,每个返回的 BlobPrefix 将计入最大结果数中。

请注意,如果在请求中包含分隔符,则无法枚举 Blob 快照。如果指定了 delimiter 参数值并且还设置了 include=snapshots 参数,Blob 服务将返回 InvalidQueryParameter 错误(HTTP 状态代码 400 – 错误的请求)。

列表输出是一个 XML 文档,其格式类似于本主题后面的代码示例中显示的格式。

请注意,响应正文包含在请求 URI 上指定的作为响应正文中的元素的所有参数值。

Last-Modified 元素中返回的 DateTime 值采用 RFC 1123 格式。有关 DateTime 值的详细信息,请参阅标头中日期/时间值的表示

此示例说明了返回两个容器的枚举操作的结果。请求 URI 如下所示:

GET https://myaccount.blob.core.windows.net/?comp=list&prefix=c&maxresults=3&include=metadata

指定了“c”前缀以筛选列表。要返回的最大结果数设置为 3 个。NextMarker 标记显示将在后续列表操作上返回的容器的名称。

<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults AccountName="https://myaccount.blob.core.windows.net/">
  <Prefix>c</Prefix>
  <MaxResults>3</MaxResults>
  <Containers>
    <Container>
      <Name>container1</Name>
      <Url>https://myaccount.blob.core.windows.net/container1</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 18:09:03 GMT</Last-Modified>
        <Etag>0x8CAE7D0C4AF4487</Etag>
      </Properties>
      <Metadata>
        <Color>orange</Color>
        <ContainerNumber>01</ContainerNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
      </Metadata>
    </Container>
    <Container>
      <Name>container2</Name>
      <Url>https://myaccount.blob.core.windows.net/container2</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 17:26:40 GMT</Last-Modified>
        <Etag>0x8CAE7CAD8C24928</Etag>
      </Properties>
      <Metadata>
        <Color>pink</Color>
        <ContainerNumber>02</ContainerNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
      </Metadata>
    </Container>
    <Container>
      <Name>container3</Name>
      <Url>https://myaccount.blob.core.windows.net/container3</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 17:26:40 GMT</Last-Modified>
        <Etag>0x8CAE7CAD8EAC0BB</Etag>
      </Properties>
      <Metadata>
        <Color>brown</Color>
        <ContainerNumber>03</ContainerNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
      </Metadata>
    </Container>
  </Containers>
  <NextMarker>container4</NextMarker>
</EnumerationResults>

此示例说明了返回名为 mycontainer 的容器中的 Blob 和快照的枚举操作的结果。请求 URI 如下所示:

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

响应包含 Blob 和快照:

<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ContainerName="https://myaccount.blob.core.windows.net/mycontainer">
  <Blobs>
    <Blob>
      <Name>blob1.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/blob1.txt</Url>
      <Properties>
        <Last-Modified>Wed, 09 Sep 2009 09:20:02 GMT</Last-Modified>
        <Etag>0x8CBFF45D8A29A19</Etag>
        <Content-Length>100</Content-Length>
        <Content-Type>text/html</Content-Type>
        <Content-Encoding />
        <Content-Language>en-US</Content-Language>
        <Content-MD5 />
        <Cache-Control>no-cache</Cache-Control>
        <BlobType>BlockBlob</BlobType>
        <LeaseStatus>unlocked</LeaseStatus>
      </Properties>
      <Metadata>
        <Color>blue</Color>
        <BlobNumber>01</BlobNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
      </Metadata>
    </Blob>
    <Blob>
      <Name>blob2.txt</Name>
      <Snapshot>2009-09-09T09:20:03.0427659Z</Snapshot>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/blob2.txt?snapshot=2009-09-09T09%3a20%3a03.0427659Z</Url>
      <Properties>
        <Last-Modified>Wed, 09 Sep 2009 09:20:02 GMT</Last-Modified>
        <Etag>0x8CBFF45D8B4C212</Etag>
        <Content-Length>5000</Content-Length>
        <Content-Type>application/octet-stream</Content-Type>
        <Content-Encoding>gzip</Content-Encoding>
        <Content-Language />
        <Content-MD5 />
        <Cache-Control />
        <BlobType>BlockBlob</BlobType>
      </Properties>
      <Metadata>
        <Color>green</Color>
        <BlobNumber>02</BlobNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
        <x-ms-invalid-name>nasdf$@#$$</x-ms-invalid-name>
      </Metadata>
    </Blob>
    <Blob>
      <Name>blob2.txt</Name>
      <Snapshot>2009-09-09T09:20:03.1587543Z</Snapshot>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/blob2.txt?snapshot=2009-09-09T09%3a20%3a03.1587543Z</Url>
      <Properties>
        <Last-Modified>Wed, 09 Sep 2009 09:20:02 GMT</Last-Modified>
        <Etag>0x8CBFF45D8B4C212</Etag>
        <Content-Length>5000</Content-Length>
        <Content-Type>application/octet-stream</Content-Type>
        <Content-Encoding>gzip</Content-Encoding>
        <Content-Language />
        <Content-MD5 />
        <Cache-Control />
        <BlobType>BlockBlob</BlobType>
      </Properties>
      <Metadata>
        <Color>green</Color>
        <BlobNumber>02</BlobNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
      </Metadata>
    </Blob>
    <Blob>
      <Name>blob2.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/blob2.txt</Url>
      <Properties>
        <Last-Modified>Wed, 09 Sep 2009 09:20:02 GMT</Last-Modified>
        <Etag>0x8CBFF45D8B4C212</Etag>
        <Content-Length>5000</Content-Length>
        <Content-Type>application/octet-stream</Content-Type>
        <Content-Encoding>gzip</Content-Encoding>
        <Content-Language />
        <Content-MD5 />
        <Cache-Control />
        <BlobType>BlockBlob</BlobType>
        <LeaseStatus>unlocked</LeaseStatus>
      </Properties>
      <Metadata>
        <Color>green</Color>
        <BlobNumber>02</BlobNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
      </Metadata>
    </Blob>
    <Blob>
      <Name>blob3.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/blob3.txt</Url>
      <Properties>
        <Last-Modified>Wed, 09 Sep 2009 09:20:03 GMT</Last-Modified>
        <Etag>0x8CBFF45D911FADF</Etag>
        <Content-Length>16384</Content-Length>
        <Content-Type>image/jpeg</Content-Type>
        <Content-Encoding />
        <Content-Language />
        <Content-MD5 />
        <Cache-Control />
        <x-ms-blob-sequence-number>3</x-ms-blob-sequence-number>
        <BlobType>PageBlob</BlobType>
        <LeaseStatus>locked</LeaseStatus>
      </Properties>
      <Metadata>
        <Color>yellow</Color>
        <BlobNumber>03</BlobNumber>
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>
      </Metadata>
    </Blob>
  </Blobs>
  <NextMarker /> 
</EnumerationResults>

此示例说明了返回名为 mycontainer 的容器中的 Blob 的枚举操作的结果。请求 URI 如下所示:

GET https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list&delimiter=/&maxresults=4

此处,已将 delimiter 参数指定为“/”。响应正文包含 BlobPrefix 标记,它表示一组以相同子字符串开头的 Blob(包括分隔符)。

容器中的示例 Blob 如下所示。在第一个枚举操作中返回前四个 Blob,因为 MaxResults 设置为 4。请注意,myfolder/blobA.txtmyfolder/blobB.txt 一起放入响应正文的 BlobPrefix 标记中,并在返回的实体数方面计为单个 Blob。要返回以该前缀开头的 Blob,请发出后续请求并将前缀参数设置为 myfolder/

  • blob1.txt

  • blob2.txt

  • myfolder/blobA.txt

  • myfolder/blobB.txt

  • newblob1.txt

  • newblob2.txt

要返回的下一个 Blob 是 newblob2.txt,它是在 NextMarker 标记中返回的。

<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ContainerName="https://myaccount.blob.core.windows.net/mycontainer">
  <MaxResults>4</MaxResults>
  <Blobs>
    <Blob>
      <Name>blob1.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/blob1.txt</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 18:41:57 GMT</Last-Modified>
        <Etag>0x8CAE7D55D050B8B</Etag>
        <Content-Length>8</Content-Length>
        <Content-Type>text/html</Content-Type>
        <Content-Encoding />
        <Content-Language>en-US</Content-Language>
        <Content-MD5 />
        <Cache-Control>no-cache</Cache-Control>
        <BlobType>BlockBlob</BlobType>
        <LeaseStatus>unlocked</LeaseStatus>
      <Properties>
    </Blob>
    <Blob>
      <Name>blob2.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/blob2.txt</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 12:18:50 GMT</Last-Modified>
        <Etag>0x8CAE7D55CF6C339</Etag>
        <Content-Length>100</Content-Length>
        <Content-Type>text/html</Content-Type>
        <Content-Encoding />
        <Content-Language>en-US</Content-Language>
        <Content-MD5 />
        <Cache-Control>no-cache</Cache-Control>
        <BlobType>BlockBlob</BlobType>
        <LeaseStatus>unlocked</LeaseStatus>
      </Properties>
    </Blob>
    <BlobPrefix>
      <Name>myfolder/</Name>
    </BlobPrefix>
    <Blob>
      <Name>newblob1.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/mycontainer/newblob1.txt</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 16:31:57 GMT</Last-Modified>
        <Etag>0x8CAE7D55CF6C339</Etag>
        <Content-Length>25</Content-Length>
        <Content-Type>text/html</Content-Type>
        <Content-Encoding />
        <Content-Language>en-US</Content-Language>
        <Content-MD5 />
        <Cache-Control>no-cache</Cache-Control>
        <BlobType>BlockBlob</BlobType>
        <LeaseStatus>unlocked</LeaseStatus>
      </Properties>
    </Blob>
  </Blobs>
  <NextMarker>newblob2.txt</NextMarker>
</EnumerationResults>

要枚举根容器中的 Blob,您可以使用以下 URL:

https://myaccount.blob.core.windows.net/$root?restype=container&comp=list&maxresults=10

请记住,在列出根容器中的 Blob 时,XML 响应正文在 Blob 的 URL 字段中不包含对根容器的显式引用。下面是列出根容器中的 Blob 的示例响应:


<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ContainerName="https://myaccount.blob.core.windows.net/%24root">
  <MaxResults>10</MaxResults>
  <Blobs>
    <Blob>
      <Name>rootblob1.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/rootblob1.txt</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 18:41:48 GMT</Last-Modified>
        <Etag>0x8CAE7D55D050B8B</Etag>
        <Content-Length>25</Content-Length>
        <Content-Type>text/html</Content-Type>
        <Content-Encoding />
        <Content-Language>en-US</Content-Language>
        <Content-MD5 />
        <Cache-Control>no-cache</Cache-Control>
        <BlobType>BlockBlob</BlobType>
        <LeaseStatus>unlocked</LeaseStatus>
      </Properties>
   </Blob>
    <Blob>
      <Name>rootblob2.txt</Name>
      <Url>https://myaccount.blob.core.windows.net/rootblob2.txt</Url>
      <Properties>
        <Last-Modified>Sun, 27 Sep 2009 18:45:57 GMT</Last-Modified>
        <Etag>0x8CAE7D55CF6C339</Etag>
        <Content-Length>14</Content-Length>
        <Content-Type>text/plain; charset=UTF-8</Content-Type>
        <Content-Encoding />
        <Content-Language>en-US</Content-Language>
        <Content-MD5 />
        <Cache-Control>no-cache</Cache-Control>
        <BlobType>BlockBlob</BlobType>
        <LeaseStatus>unlocked</LeaseStatus>
      </Properties>
    </Blob>
  </Blobs>
</EnumerationResults>

另请参阅

显示:
© 2014 Microsoft