Enumeración de recursos de Blob Storage

La API de Blob service incluye operaciones para enumerar los contenedores dentro de una cuenta (la operación Enumerar contenedores ) y los blobs de un contenedor (la operación Enumerar blobs ). Estas operaciones tienen algunas características comunes dignas de mención.

Una operación de enumeración devuelve una respuesta XML que contiene toda o parte de la lista solicitada. La operación devuelve las entidades en orden alfabético.

Este tema contiene los temas secundarios siguientes:

Establecer el máximo de resultados

Recuperación de resultados de lista parcial con marcadores

Filtrar resultados de la lista

Recorrido por el espacio de nombres del blob

Formato de respuesta XML

Establecer el máximo de resultados

Para especificar el número máximo de resultados que se devolverán en una sola llamada a una operación de lista, especifique un valor para el maxresults parámetro en el URI de solicitud.

Si no se especifica el número máximo de resultados en la solicitud o si es mayor que 5000, el servidor devuelve hasta el máximo de 5000 elementos. Si especifica un número máximo de resultados de menor o igual que cero, el servicio devuelve el código de estado 400 (solicitud incorrecta).

Recuperación de resultados de lista parcial con marcadores

La primera vez que la operación de enumeración se realiza en un recurso determinado, la respuesta puede contener todos los resultados o puede contener un subconjunto de los resultados y un valor de marcador. El valor del marcador se puede pasar a la llamada posterior para devolver el siguiente conjunto de resultados (y, a continuación, el siguiente) hasta que se complete la lista y no se devuelva ningún marcador.

El valor de marcador se incluye en el elemento NextMarker de la respuesta XML. Cuando el elemento NextMarker está vacío, la lista está completa. El valor de es un valor de NextMarker cadena que es opaco para el cliente.

Para devolver el siguiente conjunto de resultados en una operación posterior, pase el valor devuelto en la etiqueta NextMarker como el parámetro marker en el URI de solicitud.

Filtrar resultados de la lista

Para filtrar la lista de resultados, especifique una cadena de prefijo en la solicitud mediante el parámetro prefix. De esta manera, la operación de lista devuelve las entidades cuyos nombres empiecen por ese prefijo. Si el parámetro prefix se especifica en el URI de solicitud, el código XML de respuesta incluye un elemento Prefix que contiene el carácter o los caracteres de prefijo. Por ejemplo, especificar un prefijo con un valor de "c" devuelve <Prefix>``c``</Prefix> dentro del XML de respuesta. Para obtener un ejemplo, consulte la sección Enumerar contenedores más adelante en este tema.

Recorrido por el espacio de nombres del blob

La operación List Blobs tiene un parámetro adicional delimiter que permite al autor de la llamada atravesar el espacio de nombres del blob mediante un delimitador configurado por el usuario. El delimitador puede ser un carácter o una cadena. Si la solicitud incluye este parámetro, la operación devuelve un elemento BlobPrefix. El elemento BlobPrefix se devuelve en lugar de todos los blobs con nombres que comienzan por la misma subcadena hasta que aparece el carácter delimitador. El valor del BlobPrefix elemento es subcadena+delimitador, donde subcadena es la subcadena común que comienza uno o varios nombres de blob y el delimitador es el valor del parámetro delimitador .

Puede usar el valor de BlobPrefix para realizar una llamada posterior para enumerar los blobs que comienzan por este prefijo. Especifique el valor de BlobPrefix para las solicitudes posteriores. De esta manera, puede recorrer una jerarquía virtual de blobs como si fuera un sistema de archivos. Para obtener un ejemplo, consulte Enumeración de blobs con un delimitador más adelante en este tema.

Tenga en cuenta que cada uno BlobPrefix de los recuentos devueltos para el resultado máximo.

Tenga en cuenta también que no puede enumerar instantáneas de blobs si incluye un delimitador con la solicitud. Si especifica un valor para el delimiter parámetro y también establece el include=snapshots parámetro , Blob service devuelve un error InvalidQueryParameter (código de estado HTTP 400 – Solicitud incorrecta).

Formato de respuesta XML

El resultado de la lista es un documento XML con un formato similar a los mostrados en los ejemplos de código que aparecen más adelante en este tema.

El cuerpo de la respuesta incluye los valores de todos los parámetros especificados en el URI de solicitud como elementos dentro del cuerpo de la respuesta.

El DateTime valor que se devuelve en el Last-Modified elemento está en formato RFC 1123. Para obtener más información sobre DateTime los valores, vea Representación de valores de fecha y hora en encabezados.

Enumerar contenedores

En este ejemplo se muestra el resultado de una operación de enumeración que devuelve dos contenedores. El URI de solicitud es el siguiente:

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

Se especificó el prefijo "c" para filtrar la lista. El número máximo de resultados que se van a devolver se estableció en 3. La NextMarker etiqueta muestra el nombre del contenedor que se devolverá en una operación de lista posterior.

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

Enumerar blobs e instantáneas

En este ejemplo se muestra el resultado de una operación de enumeración que devuelve blobs e instantáneas en un contenedor denominado mycontainer. El URI de solicitud es el siguiente:

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

La respuesta incluye tanto los blobs como las instantáneas:

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

Enumeración de blobs con un delimitador

En este ejemplo se muestra el resultado de una operación de enumeración que devuelve blobs debajo de un contenedor denominado mycontainer. El URI de solicitud es el siguiente:

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

En este caso, el delimiter parámetro se especifica como /. El cuerpo de la respuesta incluye la BlobPrefix etiqueta , que representa el grupo de blobs que comienzan con la misma subcadena, incluido el delimitador.

Los blobs de ejemplo del contenedor son los siguientes. Los cuatro primeros se devuelven en la primera operación de enumeración, porque MaxResults se establece en 4. Tenga en cuenta que myfolder/blobA.txt y myfolder/blobB.txt se agrupan en el cuerpo de la respuesta de la BlobPrefix etiqueta y cuentan como un único blob en términos del número de entidades devueltas. Para devolver los blobs que comienzan por este prefijo, realice una solicitud posterior en la que el parámetro de prefijo esté establecido en myfolder/.

  • blob1.txt

  • blob2.txt

  • myfolder/blobA.txt

  • myfolder/blobB.txt

  • newblob1.txt

  • newblob2.txt

El siguiente blob que se va a devolver es newblob2.txt. El nombre del blob se proporciona en la NextMarker etiqueta .

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

Enumeración de blobs en el contenedor raíz

Para enumerar blobs en el contenedor raíz, puede usar la siguiente dirección URL:

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

Tenga en cuenta que, al enumerar los blobs en el contenedor raíz, el cuerpo de la respuesta XML no incluye una referencia explícita al contenedor raíz en el campo del URL blob. Esta es una respuesta de ejemplo que enumera los blobs en el contenedor raíz:

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

Consulte también

Enumerador de contenedores
Enumeración de blobs
Conceptos de Blob service
Control de versiones para los servicios de Azure Storage