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