Поделиться через


Вывод списка ресурсов хранилища BLOB-объектов

API службы BLOB-объектов включает операции для перечисления контейнеров в учетной записи (операция перечисления контейнеров ) и больших двоичных объектов в контейнере (операция перечисления BLOB-объектов ). Эти операции имеют нескольких общих черт, которые следует отметить.

Операция перечисления возвращает XML-ответ, содержащий весь запрошенный список или его часть. Операция возвращает сущности в алфавитном порядке.

Эта тема описана в следующих подразделах:

Установка максимального количества результатов

Получение частичных результатов списка с помощью маркеров

Фильтрация результатов списка

Обход пространства имен BLOB-объекта

Формат XML-ответа

Установка максимального количества результатов

Чтобы указать максимальное число результатов, возвращаемых в одном вызове операции перечисления, укажите значение параметра в maxresults URI запроса.

Если максимальное число результатов не указано в запросе или оно больше 5000, сервер возвращает не более 5000 элементов. Если указано максимальное число результатов, меньшее или равное нулю, служба возвращает код состояния 400 (недопустимый запрос).

Получение частичных результатов списка с помощью маркеров

При первом выполнении операции перечисления для определенного ресурса ответ может содержать все результаты или подмножество результатов и значение маркера. Значение маркера можно передать в последующий вызов для возврата следующего набора результатов (а затем следующего), пока список не будет завершен и маркер не будет возвращен.

Значение маркера включено в элемент NextMarker XML-ответа. Если элемент NextMarker пуст, список завершен. Значение NextMarker — это строковое значение, непрозрачное для клиента.

Чтобы вернуть следующий набор результатов в последующей операции, передайте значение, возвращенное в теге NextMarker, как параметр marker в URI запроса.

Фильтрация результатов списка

Список результатов можно отфильтровать, указав строку префикса в запросе с помощью параметра prefix. После этого операция списка вернет сущности, имена которых начинаются с этого префикса. Если параметр prefix задан в URI запроса, XML ответа будет включать элемент Prefix, содержащий символ или символы префикса. Например, при указании префикса со значением "c" возвращается <Prefix>``c``</Prefix> в XML-коде ответа. Пример см. в разделе Список контейнеров далее в этом разделе.

Обход пространства имен BLOB-объекта

Операция перечисления BLOB-объектов имеет дополнительный delimiter параметр, который позволяет вызывающей объекту проходить через пространство имен BLOB-объектов с помощью настраиваемого пользователем разделителя. Разделитель может быть задан одним символом или строкой. Когда запрос включает этот параметр, операция возвращает элемент BlobPrefix. Элемент BlobPrefix возвращается вместо всех больших двоичных объектов, имена которых начинаются с той же подстроки вплоть до появления символа разделителя. Значение BlobPrefix элемента — substring+delimiter, где подстрока — это общая подстрока, которая начинается с одного или нескольких имен BLOB-объектов, а delimiter — это значение параметра разделителя .

Значение можно использовать для последующего BlobPrefix вызова списка больших двоичных объектов, которые начинаются с этого префикса. Укажите значение для последующих BlobPrefix запросов. Таким образом, можно переходить по виртуальной иерархии BLOB-объектов, как если бы это была файловая система. Пример см. в разделе Перечисление больших двоичных объектов с разделителем далее в этом разделе.

Обратите внимание, что каждый BlobPrefix возвращаемый результат учитывается в максимальном результате.

Кроме того, помните, что вы не сможете получить список моментальных снимков BLOB-объектов, если включить разделитель в запрос. Если указать значение параметра delimiter , а также задать include=snapshots параметр, служба BLOB-объектов вернет ошибку InvalidQueryParameter (код состояния HTTP 400 — недопустимый запрос).

Формат XML-ответа

Вывод списка — это XML-документ, формат которого аналогичен тем, что показаны в примерах кода ниже в этом разделе.

Текст ответа содержит значения всех параметров, указанных в URI запроса, в качестве элементов в тексте ответа.

Значение DateTime , возвращаемое в элементе Last-Modified , имеет формат 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. URI запроса выглядит следующим образом:

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

Ответ включает и большие двоичные объекты, и моментальные снимки:

<?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. URI запроса выглядит следующим образом:

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

В этом случае delimiter параметр указывается как /. Текст ответа содержит BlobPrefix тег , представляющий группу больших двоичных объектов, которые начинаются с той же подстроки, включая разделитель.

Ниже приведен пример BLOB-объектов в контейнере. Первые четыре возвращаются в первой операции перечисления, так как MaxResults для параметра задано значение 4. Обратите внимание, что myfolder/blobA.txt и myfolder/blobB.txt сгруппированы в тексте ответа в BlobPrefix теге и считаются одним большим двоичным объектом с точки зрения количества возвращаемых сущностей. Чтобы вернуть большие двоичные объекты, начинающиеся с этого префикса, выполните последующий запрос, в котором параметр префикса имеет значение myfolder/.

  • blob1.txt

  • blob2.txt

  • myfolder/blobA.txt

  • myfolder/blobB.txt

  • newblob1.txt

  • newblob2.txt

Следующий возвращаемый большой двоичный объект — 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>  

Перечисление больших двоичных объектов в корневом контейнере

Чтобы получить список больших двоичных объектов в корневом контейнере, можно использовать следующий URL-адрес:

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

Помните, что при перечислении больших двоичных объектов в корневом контейнере текст XML-ответа не включает явную ссылку на корневой контейнер в поле BLOB-объекта URL . Ниже приведен пример ответа, в который перечислены большие двоичные объекты в корневом контейнере:

  
<?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>  
  

См. также раздел

Получение списка контейнеров
Перечисление больших двоичных объектов
Основные понятия службы BLOB-объектов
Управление версиями для служб хранилища Azure