Eliminación y restauración de un contenedor de blobs con TypeScript

En este artículo se muestra cómo eliminar contenedores con la biblioteca cliente de Azure Storage para JavaScript. Si ha habilitado la eliminación temporal de contenedores, puede restaurar los contenedores eliminados.

Requisitos previos

  • Los ejemplos de este artículo suponen que ya tiene un proyecto configurado para trabajar con la biblioteca cliente de Azure Blob Storage para JavaScript. Para obtener más información sobre la configuración del proyecto, incluida la instalación de paquetes, la importación de módulos y la creación de un objeto cliente autorizado para trabajar con recursos de datos, consulte Introducción a Azure Blob Storage y TypeScript.
  • El mecanismo de autorización debe tener permisos para eliminar un contenedor de blobs o para restaurar un contenedor eliminado temporalmente. Para obtener más información, consulte la guía de autorización para las siguientes operaciones de la API de REST:

Eliminación de un contenedor

Para eliminar un contenedor en TypeScript, cree un BlobServiceClient o ContainerClient y, a continuación, use uno de los métodos siguientes:

Después de eliminar un contenedor, no se puede crear otro con el mismo nombre durante al menos 30 segundos. Un intento de crear un contenedor con el mismo nombre producirá un error con el código de error de HTTP 409 (conflicto). Cualquier otra operación en el contenedor o en los blobs que contiene producirá un error con el código de error HTTP 404 (no encontrado).

Eliminación de un contenedor con BlobServiceClient

En el ejemplo siguiente se elimina el contenedor especificado. Use BlobServiceClient para eliminar un contenedor:

// delete container immediately on blobServiceClient
async function deleteContainerImmediately(
  blobServiceClient: BlobServiceClient,
  containerName: string
): Promise<ContainerDeleteResponse> {
  return await blobServiceClient.deleteContainer(containerName);
}

Eliminación de un contenedor con ContainerClient

En el ejemplo siguiente se muestra cómo eliminar todos los contenedores cuyos nombres comienzan con un prefijo especificado mediante ContainerClient.

async function deleteContainersWithPrefix(
  blobServiceClient: BlobServiceClient,
  prefix: string
): Promise<void> {
  const containerOptions: ServiceListContainersOptions = {
    // only delete containers not deleted
    includeDeleted: false,
    includeMetadata: false,
    includeSystem: true,
    prefix
  };

  for await (const containerItem of blobServiceClient.listContainers(
    containerOptions
  )) {
    try {
      const containerClient: ContainerClient =
        blobServiceClient.getContainerClient(containerItem.name);

      const containerDeleteMethodOptions: ContainerDeleteMethodOptions = {};

      await containerClient.delete(containerDeleteMethodOptions);

      console.log(`deleted ${containerItem.name} container - success`);
    } catch (err: unknown) {
      if (err instanceof Error) {
        console.log(
          `deleted ${containerItem.name} container - failed - ${err.message}`
        );
      }
    }
  }
}

Restauración de un contenedor eliminado

Cuando la eliminación temporal de contenedores está habilitada para una cuenta de almacenamiento, un contenedor y su contenido se pueden recuperar después de eliminarse, dentro de un período de retención especificado. Se puede restaurar un contenedor eliminado temporalmente mediante un objeto BlobServiceClient:

En el ejemplo siguiente se busca un contenedor eliminado, se obtiene el identificador de versión de ese contenedor eliminado y, a continuación, se pasa ese identificador al método undeleteContainer para restaurar el contenedor.

// Undelete specific container - last version
async function undeleteContainer(
  blobServiceClient: BlobServiceClient,
  containerName: string
): Promise<void> {
  // version to undelete
  let containerVersion: string | undefined;

  const containerOptions: ServiceListContainersOptions = {
    includeDeleted: true,
    prefix: containerName
  };

  // container listing returns version (timestamp) in the ContainerItem
  for await (const containerItem of blobServiceClient.listContainers(
    containerOptions
  )) {
    // if there are multiple deleted versions of the same container,
    // the versions are in asc time order
    // the last version is the most recent
    if (containerItem.name === containerName) {
      containerVersion = containerItem.version as string;
    }
  }

  if (containerVersion !== undefined) {
    const serviceUndeleteContainerOptions: ServiceUndeleteContainerOptions = {};

    const {
      containerClient,
      containerUndeleteResponse
    }: {
      containerClient: ContainerClient;
      containerUndeleteResponse: ContainerUndeleteResponse;
    } = await blobServiceClient.undeleteContainer(
      containerName,
      containerVersion,

      // optional/new container name - if unused, original container name is used
      //newContainerName
      serviceUndeleteContainerOptions
    );

    // Check delete
    if (containerUndeleteResponse.errorCode)
      throw Error(containerUndeleteResponse.errorCode);

    // undelete was successful
    console.log(`${containerName} is undeleted`);

    // do something with containerClient
    // ...
    // containerClient.listBlobsFlat({    includeMetadata: true,
    // includeSnapshots: false,
    // includeTags: true,
    // includeVersions: false,
    // prefix: ''});
  }
}

Recursos

Para más información sobre cómo eliminar un contenedor con la biblioteca cliente de Azure Blob Storage para JavaScript, consulte los recursos siguientes.

Operaciones de API REST

El SDK de Azure para JavaScript contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de JavaScript. Los métodos de la biblioteca cliente para eliminar o restaurar un contenedor usan esta operación de API REST:

Ejemplos de código

Recursos de la biblioteca cliente

Consulte también