Borrar objetos

En esta página, se muestra cómo borrar objetos de tus buckets en Cloud Storage.

Roles obligatorios

Para obtener los permisos que necesitas para borrar objetos, pídele a tu administrador que te otorgue el rol de IAM de usuario de objeto de almacenamiento (roles/storage.objectUser) para el bucket que contiene los objetos que deseas borrar.

Si planeas usar la consola de Google Cloud para completar las tareas de esta página, pídele a tu administrador que te otorgue el rol de administrador de almacenamiento (roles/storage.admin) en lugar del usuario de objeto de Storage (roles/storage.objectUser o el rol básico de visualizador (roles/viewer), además de la función de usuario de objeto de almacenamiento (roles/storage.objectUser).

Estos roles contienen los permisos necesarios para borrar objetos. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

  • storage.objects.delete
  • storage.objects.list
    • Este permiso solo es necesario cuando se usa la consola de Google Cloud o cuando se usan la marca --recursive o los comodines en Google Cloud CLI.
  • storage.buckets.list
    • Este permiso solo es necesario cuando se usa la consola de Google Cloud para realizar las instrucciones de esta página.

También puedes obtener estos permisos con otros roles predefinidos o roles personalizados.

Para obtener más información sobre cómo otorgar roles en los buckets, consulta Usa IAM con buckets.

Borrar un objeto

Completa los siguientes pasos para borrar objetos de uno de tus buckets de Cloud Storage:

Console

  1. En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. En la lista de buckets, haz clic en el nombre del bucket que contiene el objeto que deseas borrar.

    Se abrirá la página Detalles del bucket y se seleccionará la pestaña Objetos.

  3. Navega hasta los objetos, que pueden estar en una carpeta.

  4. Haz clic en la casilla de verificación de cada objeto que deseas borrar.

    También puedes hacer clic en la casilla de verificación de las carpetas , lo que borrará todos los objetos que contiene esa carpeta.

  5. Haz clic en el botón Borrar.

  6. Haz clic en Borrar en el diálogo que aparece.

Si borras muchos objetos a la vez, puedes realizar un seguimiento del progreso de eliminación; para ello, haz clic en el ícono Notificaciones en la consola de Google Cloud. La consola de Google Cloud puede borrar de forma masiva y en segundo plano varios millones de objetos.

Para obtener información sobre cómo ver detalles de errores acerca de operaciones fallidas de Cloud Storage en la consola de Google Cloud, consulta Solución de problemas.

Línea de comandos

Usa el comando gcloud storage rm de Google Cloud CLI:

gcloud storage rm gs://BUCKET_NAME/OBJECT_NAME

Aquí:

  • BUCKET_NAME es el nombre del bucket que contiene el objeto que deseas borrar. Por ejemplo, my-bucket.
  • OBJECT_NAME es el nombre del objeto que deseas borrar. Por ejemplo, pets/dog.png.

Si se realiza de forma correcta, la respuesta se verá como el ejemplo siguiente:

Removing objects:
Removing gs://example-bucket/file.txt...
  Completed 1/1

Bibliotecas cliente

C++

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage C++.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

namespace gcs = ::google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& object_name) {
  google::cloud::Status status =
      client.DeleteObject(bucket_name, object_name);

  if (!status.ok()) throw std::runtime_error(status.message());
  std::cout << "Deleted " << object_name << " in bucket " << bucket_name
            << "\n";
}

C#

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage C#.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


using Google.Cloud.Storage.V1;
using System;

public class DeleteFileSample
{
    public void DeleteFile(
        string bucketName = "your-unique-bucket-name",
        string objectName = "your-object-name")
    {
        var storage = StorageClient.Create();
        storage.DeleteObject(bucketName, objectName);
        Console.WriteLine($"Deleted {objectName}.");
    }
}

Go

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Go.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
)

// deleteFile removes specified object.
func deleteFile(w io.Writer, bucket, object string) error {
	// bucket := "bucket-name"
	// object := "object-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	o := client.Bucket(bucket).Object(object)

	// Optional: set a generation-match precondition to avoid potential race
	// conditions and data corruptions. The request to delete the file is aborted
	// if the object's generation number does not match your precondition.
	attrs, err := o.Attrs(ctx)
	if err != nil {
		return fmt.Errorf("object.Attrs: %w", err)
	}
	o = o.If(storage.Conditions{GenerationMatch: attrs.Generation})

	if err := o.Delete(ctx); err != nil {
		return fmt.Errorf("Object(%q).Delete: %w", object, err)
	}
	fmt.Fprintf(w, "Blob %v deleted.\n", object)
	return nil
}

Java

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Java.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class DeleteObject {
  public static void deleteObject(String projectId, String bucketName, String objectName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Blob blob = storage.get(bucketName, objectName);
    if (blob == null) {
      System.out.println("The object " + objectName + " wasn't found in " + bucketName);
      return;
    }
    BlobId idWithGeneration = blob.getBlobId();
    // Deletes the blob specified by its id. When the generation is present and non-null it will be
    // specified in the request.
    // If versioning is enabled on the bucket and the generation is present in the delete request,
    // only the version of the object with the matching generation will be deleted.
    // If instead you want to delete the current version, the generation should be dropped by
    // performing the following.
    // BlobId idWithoutGeneration =
    //    BlobId.of(idWithGeneration.getBucket(), idWithGeneration.getName());
    // storage.delete(idWithoutGeneration);
    storage.delete(idWithGeneration);

    System.out.println("Object " + objectName + " was permanently deleted from " + bucketName);
  }
}

Node.js

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Node.js.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The ID of your GCS file
// const fileName = 'your-file-name';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

// Optional:
// Set a generation-match precondition to avoid potential race conditions
// and data corruptions. The request to delete is aborted if the object's
// generation number does not match your precondition. For a destination
// object that does not yet exist, set the ifGenerationMatch precondition to 0
// If the destination object already exists in your bucket, set instead a
// generation-match precondition using its generation number.
const deleteOptions = {
  ifGenerationMatch: generationMatchPrecondition,
};
async function deleteFile() {
  await storage.bucket(bucketName).file(fileName).delete(deleteOptions);

  console.log(`gs://${bucketName}/${fileName} deleted`);
}

deleteFile().catch(console.error);

PHP

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage PHP.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an object.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 *        (e.g. 'my-bucket')
 * @param string $objectName The name of your Cloud Storage object.
 *        (e.g. 'my-object')
 */
function delete_object(string $bucketName, string $objectName): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->delete();
    printf('Deleted gs://%s/%s' . PHP_EOL, $bucketName, $objectName);
}

Python

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Python.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import storage


def delete_blob(bucket_name, blob_name):
    """Deletes a blob from the bucket."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"

    storage_client = storage.Client()

    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)
    generation_match_precondition = None

    # Optional: set a generation-match precondition to avoid potential race conditions
    # and data corruptions. The request to delete is aborted if the object's
    # generation number does not match your precondition.
    blob.reload()  # Fetch blob metadata to use in generation_match_precondition.
    generation_match_precondition = blob.generation

    blob.delete(if_generation_match=generation_match_precondition)

    print(f"Blob {blob_name} deleted.")

Ruby

Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Ruby.

Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

def delete_file bucket_name:, file_name:
  # The ID of your GCS bucket
  # bucket_name = "your-unique-bucket-name"

  # The ID of your GCS object
  # file_name = "your-file-name"

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.new
  bucket  = storage.bucket bucket_name, skip_lookup: true
  file    = bucket.file file_name

  file.delete

  puts "Deleted #{file.name}"
end

API de REST

API de JSON

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de JSON con una solicitud DELETE:

    curl -X DELETE \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"

    Aquí:

    • BUCKET_NAME es el nombre del bucket que contiene el objeto que deseas borrar. Por ejemplo, my-bucket.
    • OBJECT_NAME es el nombre codificado como URL del objeto que deseas borrar. Por ejemplo, pets/dog.png, codificado en URL como pets%2Fdog.png.

API de XML

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de XML con una solicitud DELETE Object:

    curl -X DELETE \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"

    Aquí:

    • BUCKET_NAME es el nombre del bucket que contiene el objeto que deseas borrar. Por ejemplo, my-bucket.
    • OBJECT_NAME es el nombre codificado como URL del objeto que deseas borrar. Por ejemplo, pets/dog.png, codificado en URL como pets%2Fdog.png.

Borra objetos de forma masiva

Si deseas borrar de forma masiva cien mil objetos o más, evita usar gcloud storage, ya que el proceso toma mucho tiempo en completarse. En su lugar, considera una de las siguientes opciones:

  • La función Administración del ciclo de vida de los objetos puede borrar cualquier cantidad de objetos. Para borrar objetos de forma masiva en tu bucket con esta función, establece una regla de configuración del ciclo de vida en tu bucket en la que la condición tenga Age establecido en 0 días y la acción esté configurada en delete. Una vez que configuras la regla, Cloud Storage realiza la eliminación masiva de forma asíncrona.

  • La consola de Google Cloud también es una opción recomendada cuando se borran hasta un millón de objetos. Una vez que inicias esta solicitud de eliminación, el proceso se realiza en segundo plano. Para comprobar el estado de la eliminación masiva, haz clic en el botón Notificaciones () en el encabezado de la consola de Google Cloud.

  • Cuando usas ciertas bibliotecas cliente o la API de JSON directamente, puedes agrupar en lotes tus solicitudes de eliminación para reducir la cantidad de conexiones HTTP que necesitas realizar.

¿Qué sigue?