Exportar (0) Imprimir
Expandir todo

Enumerar los recursos de blob

Actualizado: noviembre de 2014

La API del servicio Blob incluye operaciones para enumerar los contenedores de una cuenta (la operación List Containers) y los blobs de un contenedor (la operación List 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 la lista solicitada o parte de ella. La operación devuelve las entidades en orden alfabético.

Este tema contiene los temas secundarios siguientes:

Establecer el número máximo de resultados

Recuperar resultados de listas parciales con marcadores

Filtrar los resultados de las listas

Recorrer el espacio de nombres del blob

Formato de la respuesta XML

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

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

La primera vez que se lleva a cabo la operación de enumeración en un recurso determinado, la respuesta puede contener todos los resultados o bien, un subconjunto de resultados y un valor de marcador. El valor de marcador se puede pasar a la llamada siguiente para que devuelva el siguiente conjunto de resultados, y así sucesivamente, hasta que la lista esté completa y no se devuelvan más marcadores.

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 NextMarker es un valor de 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.

  • 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, si se especifica un prefijo con un valor de “c” se devuelve <Prefix>c</Prefix> en el código XML de respuesta. Para obtener un ejemplo, vea la sección Lista de contenedores más adelante en este tema.

La operación List Blobs tiene un parámetro delimiter adicional que permite al autor de la llamada recorrer el espacio de nombres del blob utilizando 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 elemento BlobPrefix es substring+delimiter, donde substring es la subcadena común con la que comienzan uno o varios nombres de blob, y delimiter es el valor del parámetro delimiter.

Puede utilizar el valor de BlobPrefix para hacer una llamada subsiguiente que permita enumerar los blobs que comienzan por este prefijo, especificando el valor de BlobPrefix para el parámetro prefix en el URI de solicitud. De esta manera, puede recorrer una jerarquía virtual de blobs como si fuera un sistema de archivos. Para obtener un ejemplo, vea el ejemplo Lista de blobs delimitada más adelante en este tema.

Tenga en cuenta que cada elemento BlobPrefix devuelto se tiene en cuenta para calcular el número máximo de resultados.

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

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.

Tenga en cuenta que el cuerpo de respuesta incluye los valores de todos los parámetros que se especificaron en el URI de solicitud como elementos dentro del cuerpo de respuesta.

El valor DateTime devuelto en el elemento Last-Modified está en el formato RFC 1123. Para obtener más información acerca de los valores DateTime, vea Representación de valores de fecha u hora en encabezados.

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

En este ejemplo se muestra el resultado de una operación de enumeración que devuelve los blobs y las instantáneas de 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>

En este ejemplo se muestra el resultado de una operación de enumeración que devuelve los blobs 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 parámetro delimiter se ha especificado como “/”. El cuerpo de respuesta incluye la etiqueta BlobPrefix, que representa el grupo de blobs que comienzan por la misma subcadena, incluido el delimitador.

Los blobs de ejemplo del contenedor son los siguientes. Los primeros cuatro se devuelven en la primera operación de enumeración, dado que MaxResults se establece en 4. Tenga en cuenta que myfolder/blobA.txt y myfolder/blobB.txt se agrupan en el cuerpo de respuesta en la etiqueta BlobPrefix y cuentan como un solo blob en lo que se refiere al 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, devuelto en la etiqueta 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>

Para enumerar los blobs del contenedor raíz, puede utilizar la dirección URL siguiente:

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

Tenga en cuenta que al enumerar los blobs del contenedor raíz, el cuerpo de respuesta XML no incluye una referencia explícita al contenedor raíz en el campo URL del blob. Esta es una respuesta de ejemplo que enumera los blobs del 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>

Vea también

Mostrar:
© 2015 Microsoft