Haz públicos los datos

En esta página, se muestra cómo hacer que los objetos que posees se puedan leer de forma pública. Para obtener más información sobre cómo acceder a los datos que se hicieron públicos, consulta Accede a datos públicos.

Haz que los objetos individuales se puedan leer de forma pública

Sigue los pasos a continuación para hacer que los objetos individuales sean legibles de forma pública:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Console.
    Abrir el navegador de Cloud Storage
  2. En la lista de depósitos, haz clic en el nombre del depósito que contiene el objeto que deseas hacer público y navega al objeto si está en un subdirectorio.

  3. Haz clic en el menú desplegable asociado al objeto que deseas hacer público.

    El menú desplegable aparece como tres puntos verticales en el extremo derecho de la fila del objeto.

  4. Selecciona Editar permisos del menú desplegable.

  5. En la superposición que aparece, haz clic en el botón + Agregar elemento.

  6. Para allUsers, agrega un permiso.

    • En Entidad, selecciona Usuario.
    • En Nombre, selecciona allUsers.
    • En Acceso, selecciona Lector.
  7. Haz clic en Guardar.

Una vez compartido de forma pública, aparece un ícono de vínculo en la columna de acceso público. Puedes hacer clic en este ícono para obtener la URL del objeto.

gsutil

Usa el comando gsutil acl ch:

gsutil acl ch -u AllUsers:R gs://[BUCKET_NAME]/[OBJECT_NAME]

En el que:

  • [BUCKET_NAME] es el nombre del depósito que contiene el objeto que quieres publicar. Por ejemplo, my-bucket.
  • [OBJECT_NAME] es el nombre del objeto que quieres publicar. Por ejemplo, pets/dog.png.

Si tienes éxito, la respuesta se parece al siguiente ejemplo:

Updated ACL on gs://[BUCKET_NAME]/[OBJECT_NAME]

Ejemplos de código

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name, gcs::ObjectMetadataPatchBuilder(),
      gcs::PredefinedAcl::PublicRead());

  if (!updated) {
    throw std::runtime_error(updated.status().message());
  }

  std::cout << "Object updated. The full metadata after the update is: "
            << *updated << "\n";
}

C#

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

private void MakePublic(string bucketName, string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.Acl = storageObject.Acl ?? new List<ObjectAccessControl>();
    storage.UpdateObject(storageObject, new UpdateObjectOptions
    {
        PredefinedAcl = PredefinedObjectAcl.PublicRead
    });
    Console.WriteLine(objectName + " is now public and can be fetched from " +
        storageObject.MediaLink);
}

Go

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

acl := client.Bucket(bucket).Object(object).ACL()
if err := acl.Set(ctx, storage.AllUsers, storage.RoleReader); err != nil {
	return err
}

Java

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

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
Acl acl = storage.createAcl(blobId, Acl.of(User.ofAllUsers(), Role.READER));

Node.js

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

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

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to make public, e.g. file.txt';

// Makes the file public
await storage
  .bucket(bucketName)
  .file(filename)
  .makePublic();

console.log(`gs://${bucketName}/${filename} is now public.`);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Make an object publically accessible.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 *
 * @return void
 */
function make_public($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['acl' => []], ['predefinedAcl' => 'PUBLICREAD']);
    printf('gs://%s/%s is now public' . PHP_EOL, $bucketName, $objectName);
}

Python

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

def make_blob_public(bucket_name, blob_name):
    """Makes a blob publicly accessible."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)

    blob.make_public()

    print('Blob {} is publicly accessible at {}'.format(
        blob.name, blob.public_url))

Ruby

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

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of file in Google Cloud Storage to make public"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.acl.public!

puts "#{file.name} is publicly accessible at #{file.public_url}"

API de REST

API de JSON

  1. Obtén un token de autorización de acceso de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Crea un archivo .json que contenga la siguiente información:

    {
      "entity": "allUsers",
      "role": "READER"
    }
  3. Usa cURL para llamar a la API de JSON con una solicitud de LCA Insert:

    curl -X POST --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]/acl"

    En esta solicitud, se muestra lo siguiente:

    • [JSON_FILE_NAME] es el nombre del archivo que creaste en el paso 2.
    • [OAUTH2_TOKEN] es el token de acceso que creaste en el paso 1.
    • [BUCKET_NAME] es el nombre del depósito que contiene el objeto que quieres publicar. Por ejemplo, my-bucket.
    • [OBJECT_NAME] es el nombre del objeto que quieres publicar. Por ejemplo, pets/dog.png.

API de XML

  1. Obtén un token de autorización de acceso de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Crea un archivo .xml que contenga la siguiente información:

    <AccessControlList>
      <Entries>
        <Entry>
          <Scope type="AllUsers"/>
          <Permission>READ</Permission>
        </Entry>
      </Entries>
    </AccessControlList>
  3. Usa cURL para llamar a la API de XML con una solicitud Set Object ACL:

    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]?acl"

    En el que:

    • [XML_FILE_NAME] es el nombre del archivo que creaste en el paso 2.
    • [OAUTH2_TOKEN] es el token de acceso que creaste en el paso 1.
    • [BUCKET_NAME] es el nombre del depósito que contiene el objeto que quieres publicar. Por ejemplo, my-bucket.
    • [OBJECT_NAME] es el nombre del objeto que quieres publicar. Por ejemplo, pets/dog.png.

Haz que grupos de objetos sean legibles de forma pública

Sigue los pasos a continuación, para hacer legibles de forma pública todos los objetos en un depósito:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Console.
    Abrir el navegador de Cloud Storage
  2. En la lista de depósitos, haz clic en el nombre del depósito que deseas hacer público.

  3. Selecciona la pestaña Permisos cerca de la parte superior de la página.

  4. Haz clic en el botón Agregar miembros.

    Aparece el cuadro de diálogo Agregar miembros.

  5. En el campo Nuevos miembros, ingresa allUsers.

  6. En el menú desplegable Funciones, selecciona el submenú Almacenamiento y haz clic en la opción Lector de objetos de almacenamiento.

  7. Haz clic en Guardar.

Una vez que se comparte de forma pública, aparece un ícono de vínculo para cada objeto en la columna de acceso público. Puedes hacer clic en este ícono para obtener la URL del objeto.

gsutil

Usa el comando gsutil iam ch:

gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]

En este comando, [BUCKET_NAME] es el nombre del depósito al que pertenece el objeto que quieres publicar. Por ejemplo, my-bucket.

API de REST

API de JSON

  1. Obtén un token de autorización de acceso de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Crea un archivo .json que contenga la siguiente información:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  3. Usa cURL para llamar a la API de JSON con una solicitud de depósito PUT:

    curl -X PUT --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    En la que:

    • [JSON_FILE_NAME] es el nombre del archivo que creaste en el paso 2.
    • [OAUTH2_TOKEN] es el token de acceso que creaste en el paso 1.
    • [BUCKET_NAME] es el nombre del depósito al que pertenece el objeto que quieres publicar. Por ejemplo, my-bucket.

API de XML

La API de XML no admite que todos los objetos de un depósito se hagan legibles de forma pública. Usa gsutil o la API de JSON en su lugar.

Próximos pasos