Integra en Google Cloud Platform

Cloud Storage para Firebase está estrechamente integrado con Google Cloud Platform. Los SDK de Firebase para Cloud Storage almacenan archivos directamente en los depósitos de Google Cloud Storage y, a medida que crece la aplicación, puedes integrar fácilmente otros servicios de Google Cloud, como procesamiento administrado con servicios como App Engine o Cloud Functions, o API de aprendizaje automático con servicios como Cloud Vision o Google Traductor.

De forma interna, los SDK de Firebase para Cloud Storage usan el depósito predeterminado en el nivel gratuito de Google App Engine. Esto te permite comenzar a utilizar Cloud Storage rápidamente, sin necesidad de ingresar una tarjeta de crédito ni habilitar una cuenta de facturación. También te permite compartir datos fácilmente entre Firebase y un proyecto de Google Cloud Platform.

La integración con Google Cloud Platform, incluida la importación de depósitos existentes de Cloud Storage, requiere un proyecto de Firebase en el plan Blaze. Obtén más información acerca de los planes en nuestra página de precios.

Google Cloud Storage

Puedes usar las API de Google Cloud Storage para acceder a archivos subidos mediante los SDK de Firebase para Cloud Storage, en especial para ejecutar operaciones más complejas, como copiar o mover un archivo, o crear una lista de todos los archivos disponibles en una referencia.

Es importante que tengas en cuenta que estas solicitudes usan las opciones de control de acceso de Google Cloud Storage en lugar de Firebase Authentication y las reglas de seguridad de Storage.

API

Además de los SDK de Firebase para Cloud Storage, hay otras maneras de acceder a los datos almacenados en tu depósito de Cloud Storage, según lo que desees hacer. Si accedes a los datos en un servidor, te ofrecemos bibliotecas en el servidor, al igual que una API RESTful XML compatible con JSON y S3. Si necesitas ejecutar secuencias de comandos de cambios o realizar otras tareas administrativas, tenemos una herramienta de línea de comandos que te será útil.

SDK de Google Cloud Server

Google Cloud Platform ofrece SDK de servidor de alta calidad para diversos productos de GCP, incluido Cloud Storage. Estas bibliotecas están disponibles en Node.js, Java, Go, Python, PHP y Ruby. Para obtener más información, incluidas las instrucciones de instalación, autenticación y solución de problemas, consulta los documentos específicos de cada plataforma en los vínculos.

A continuación, se muestran ejemplos de uso del SDK de Google Cloud:

Node.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable Storage
    var gcs = gcloud.storage({
      projectId: 'grape-spaceship-123',
      keyFilename: '/path/to/keyfile.json'
    });

    // Reference an existing bucket.
    var bucket = gcs.bucket('my-existing-bucket');

    // Upload a local file to a new file to be created in your bucket.
    bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
      if (!err) {
        // "zebra.jpg" is now in your bucket.
      }
    });

    // Download a file from your bucket.
    bucket.file('giraffe.jpg').download({
      destination: '/photos/zoo/giraffe.jpg'
    }, function(err) {});
    

Java

    // Enable Storage
    Storage storage = StorageOptions.builder()
      .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json"))
      .build()
      .service();

    // Upload a local file to a new file to be created in your bucket.
    InputStream uploadContent = ...
    BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg");
    BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build();
    Blob zebraBlob = storage.create(blobInfo, content);

    // Download a file from your bucket.
    Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null);
    InputStream downloadContent = giraffeBlob.getInputStream();
    

Go

    // Enable Storage
    client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
    if err != nil {
        log.Fatal(err)
    }

    // Download a file from your bucket.
    rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer rc.Close()
    body, err := ioutil.ReadAll(rc)
    if err != nil {
        log.Fatal(err)
    }
    

Python

    # Import gcloud
    from google.cloud import storage

    # Enable Storage
    client = storage.Client()

    # Reference an existing bucket.
    bucket = client.get_bucket('my-existing-bucket')

    # Upload a local file to a new file to be created in your bucket.
    zebraBlob = bucket.get_blob('zebra.jpg')
    zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg')

    # Download a file from your bucket.
    giraffeBlob = bucket.get_blob('giraffe.jpg')
    giraffeBlob.download_as_string()
    

PHP

    // Require gcloud
    require 'vendor/autoload.php';
    use Google\Cloud\Storage\StorageClient;

    // Enable Storage
    $storage = new StorageClient([
        'projectId' => 'grape-spaceship-123'
    ]);

    // Reference an existing bucket.
    $bucket = $storage->bucket('my-existing-bucket');

    // Upload a file to the bucket.
    $bucket->upload(
        fopen('/photos/zoo/zebra.jpg', 'r')
    );

    // Download a file from your bucket.
    $object = $bucket->object('giraffe.jpg');
    $object->downloadToFile('/photos/zoo/giraffe.jpg');
    

Ruby

    # Require gcloud
    require "google/cloud"

    # Enable Storage
    gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json"
    storage = gcloud.storage

    # Reference an existing bucket.
    bucket = storage.bucket "my-existing-bucket"

    # Upload a file to the bucket.
    bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg"

    # Download a file from your bucket.
    file = bucket.file "giraffe.jpg"
    file.download "/photos/zoo/#{file.name}"
    

API de REST

Si usas un lenguaje que no tiene una biblioteca cliente, deseas hacer algo que las bibliotecas cliente no pueden o si prefieres usar tu cliente HTTP favorito, Cloud Storage te permite usar las API de JSON y de XML.

gsutil

gsutil es una herramienta de línea de comandos que te da acceso directo a Cloud Storage. Puedes usar gsutil para una serie de tareas de administración de objetos y depósitos, como las siguientes:

  • subir, descargar y borrar objetos
  • crear listas de depósitos y objetos
  • mover, copiar y cambiar nombres de objetos
  • editar LCA de objetos y depósitos

gsutil permite otras operaciones avanzadas, como mover archivos de un directorio a otro o borrar todos los archivos en una ubicación determinada.

Mover todos los archivos de una referencia a otra es tan fácil como se muestra a continuación:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

Borrar todos los archivos en una referencia por lote es un proceso casi igual de intuitivo:

# Delete all files under a path
gsutil rm -r gs://bucket/reference/to/delete

# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**

# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket

Control de versiones de objetos

¿Alguna vez borraste algo por accidente sin tener una copia de seguridad? El control de versiones de objetos es una función de Cloud Storage que proporciona una manera automática de crear copias de seguridad de tus datos y de restaurarlos a partir de esas copias. Puedes habilitar el control de versiones de objetos mediante el comando gsutil versioning set:

gsutil versioning set on gs://<your-cloud-storage-bucket>

Firebase Storage siempre toma la versión más reciente, de modo que si deseas restablecer un objeto, debes usar una de las otras API o herramientas descritas previamente para establecer el objeto que desees como el más reciente.

Administración del ciclo de vida de los objetos

Tener la capacidad de archivar o borrar archivos inactivos de forma automática es una función útil para muchas aplicaciones. Afortunadamente, Cloud Storage proporciona la función de administración del ciclo de vida de los objetos, que te permite borrar o archivar objetos después de un período determinado.

Piensa en una aplicación para compartir fotos en la que deseas borrar todas las fotos al cabo de un día. Puedes configurar una política de ciclo de vida de objeto de la siguiente forma:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

Para implementarla, usa el comando gsutil lifecycle set:

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

Ten en cuenta que esto se aplica a todos los archivos del depósito. Por lo tanto, si almacenas copias de seguridad de usuarios importantes que deseas mantener por un largo tiempo junto con fotos que deseas borrar a diario, te recomendamos usar dos depósitos distintos o ejecutar eliminaciones de forma manual con gsutil o tu propio servidor.

Google App Engine

Google App Engine es una "plataforma como servicio" que escala la lógica del backend de forma automática en respuesta a la cantidad de tráfico que recibe. Solo debes subir tu código de backend y Google administrará la disponibilidad de tu app, sin necesidad de que aprovisiones o mantengas ningún servidor. App Engine es una forma rápida y fácil de agregar poder de procesamiento o ejecución de confianza a tu aplicación de Firebase.

Los SDK de Firebase para Cloud Storage usan el depósito predeterminado de Google App Engine, lo que significa que si compilas una app de App Engine, puedes usar las API integradas de App Engine para compartir datos entre Firebase y App Engine. Esto es útil para ejecutar codificaciones de audio, transcodificaciones de video y transformaciones de imagen, junto con otras tareas de procesamiento intensivo en segundo plano.

Los entornos estándar de Java, Python y Go para Google App Engine incluyen la API de imágenes de GAE (Java, Python y Go), que permite cambiar el tamaño de una imagen, rotarla, girarla y recortarla, además de mostrar una URL de entrega de imagen que permite realizar transformaciones en el cliente, de manera similar a Imgix y Cloudinary.

Cuando importas un proyecto existente de Google Cloud Platform a Firebase, si deseas que algún objeto de App Engine existente esté disponible en Firebase, deberás configurar el control de acceso predeterminado en tus objetos para permitir que Firebase Storage tenga acceso. Para ello, debes ejecutar el siguiente comando en gsutil:

gsutil -m acl ch -r -u firebase-storage@system.gserviceaccount.com:O gs://<your-cloud-storage-bucket>

Problemas conocidos

Existen dos casos conocidos en los que no puedes importar tu app de GAE:

  1. El proyecto contiene una app maestro/esclavo de App Engine Datastore antigua.
  2. El proyecto tiene un ID del proyecto con un prefijo de dominio, por ejemplo: domain.com:project-1234.

En ambos casos, el proyecto no será compatible con Cloud Storage para Firebase y deberás crear un proyecto nuevo de Firebase para usar Cloud Storage. Si necesitas ayuda, comunícate con el equipo de asistencia.

Google Cloud Functions (Beta)

Google Cloud Functions es una solución de procesamiento ligera, basada en eventos y asíncrona que permite crear funciones pequeñas de un solo propósito que responden a eventos, sin tener que administrar servidores ni entornos de tiempo de ejecución. Estas funciones pueden usarse para la transcodificación de videos, la clasificación de imágenes con el aprendizaje automático o la sincronización de metadatos con Firebase Realtime Database. Con aún menos sobrecarga que Google App Engine, Cloud Functions es la forma más rápida de reaccionar a los cambios en Firebase Storage.

API de Google Cloud Vision

La API de Google Cloud Vision encapsula potentes modelos de aprendizaje automático en una API fácil de usar, lo que permite que los desarrolladores conozcan el contenido de una imagen. Clasifica imágenes de forma rápida en miles de categorías, detecta objetos individuales y rostros en las imágenes, detecta y lee palabras impresas en las imágenes, identifica el contenido ofensivo e incluso proporciona un análisis de opiniones de la imagen.

API de Google Cloud Speech

De manera similar a la API de Vision, la API de Google Cloud Speech permite a los desarrolladores extraer texto desde un archivo de audio almacenado en Cloud Storage. La API reconoce más de 80 idiomas y variantes, por lo cual puedes usarla con tu base de usuarios global. Si se combina con la API de Google Cloud Natural Language, los desarrolladores pueden extraer el texto sin procesar e inferir el significado del texto. Si necesitas un público global, úsala en conjunto con la Google Translate API para traducir el texto a más de 90 idiomas.

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.