Azure Rest Api List容器:参数标记

时间:2017-01-31 00:31:25

标签: azure azure-storage-blobs

嗨大家我正在构建一个与Azure Storage Rest API交互的客户端。

我正在浏览文档https://docs.microsoft.com/ru-ru/rest/api/storageservices/fileservices/list-containers2

并且不理解可以与Azure请求一起发送的参数前缀和标记的使用。

它说:

前缀

  

可选。过滤结果以仅返回其名称的容器   以指定的前缀开头。

标记

  

可选。一个字符串值,用于标识列表的部分   使用下一个列表操作返回的容器。该   如果操作返回响应正文中的NextMarker值   列表操作未返回剩余要列出的所有容器   与当前页面。 NextMarker值可用作值   用于后续调用中的marker参数以请求下一页   列表项目。

     

标记值对客户端不透明。

使用Prefix,我认为:

如果我有dir结构:

file01.txt
images/image01.jpg
images/folder/image001.jpg
fightVideo/subFolder/current/video001.mpg
fightVideo/subFolder/current/video002.mpg
  

如果我将前缀容器名称设为“fight”。它应该回来   fightVideo。

但我不确定。

对于Marker,我不明白它的用途是什么?

  

有人可以通过示例解释前缀和标记的使用吗?

2 个答案:

答案 0 :(得分:3)

在列出容器的上下文中,如果指定constructor(platform: Platform,public myapp: IonicApp) { this.pltform=platform; this.app=myapp; platform.ready().then(() => { StatusBar.styleDefault(); Splashscreen.hide(); platform.registerBackButtonAction(function(event){ window.alert("back button pressed"); let nav = this.app.getActiveNav(); if (nav.canGoBack()){ //Can we go back? nav.pop(); }else{ this.platform.exitApp(); //Exit from app } }); } } 参数,它将列出以该前缀值开头的容器名称。它与列出blob无关。

List blobs操作也支持此prefix参数,当您指定此参数时,它将列出以该前缀值开头的blob名称。

因此,您给出的示例是列出blob,当您在其中指定prefix作为前缀时,您将返回flightfightVideo/subFolder/current/video001.mpg作为响应,但不会在您调用列表容器时用这个前缀。

关于fightVideo/subFolder/current/video002.mpg,Kalyan的解释是正确的,但让我再补充一点。

本质上Azure存储服务是一种共享服务,您根本无法要求它一次性返回所有结果(如果我们从SQL世界中进行类比,则根本无法做marker之类的事情)。对服务的每个请求都分配了预定义的超时,响应将包括在该时间内获取的项目+如果服务认为有更多可用数据,则可选择包括令牌。此令牌称为SELECT * FROM TABLE。为了获得下一组项目,您需要在下一个请求中的marker参数中传递此延续令牌。

每次调用存储服务都会尝试返回预定义的最大项目数。对于列出blob容器/ blob,此限制为5000项。对于列出表/实体,此限制为1000个项目。如果您的帐户中有更多项目,那么除了此数据存储服务之外,还会返回一个延续令牌,告知您有更多可用数据。

请注意,即使有限制,但您不能总是假设您将获得这些数量的记录。根据许多条件,您很可能无法获取任何数据但仍会收到延续令牌。所以你的代码也需要处理这个条件。

答案 1 :(得分:1)

如果要列出的blob太多,则响应包含NextMarker元素。

<?xml version="1.0" encoding="utf-8"?>  
<EnumerationResults ServiceEndpoint="https://myaccount.blob.core.windows.net">  
  <Prefix>string-value</Prefix>  
  <Marker>string-value</Marker>  
  <MaxResults>int-value</MaxResults>  
  <Containers>  
    <Container>  
      <Name>container-name</Name>  
      <Properties>  
        <Last-Modified>date/time-value</Last-Modified>  
        <Etag>etag</Etag>  
        <LeaseStatus>locked | unlocked</LeaseStatus>  
        <LeaseState>available | leased | expired | breaking | broken</LeaseState>  
        <LeaseDuration>infinite | fixed</LeaseDuration> 
        <PublicAccess>container | blob</PublicAccess>       
      </Properties>  
      <Metadata>  
        <metadata-name>value</metadata-name>  
      </Metadata>  
    </Container>  
  </Containers>  
  <NextMarker>marker-value</NextMarker>  
</EnumerationResults>

REST API文档提到标记值可以在后续调用中用于请求下一组列表项。

您可以将标记视为paginatator索引。