Proporciona acceso público a los archivos

Un caso de uso común es hacer que tus archivos sean de acceso público a través de la Web. Puedes hacerlo en el entorno estándar de PHP 5 de cualquiera de las siguientes maneras:

  • Entregar archivos en Google Cloud Storage desde una secuencia de comandos: tu app entrega el archivo.
  • Entregar archivos desde Google Cloud Storage, lo que los entrega directamente.
  • Entregar archivos subidos con la app mediante el controlador estático en app.yaml.

Ten en cuenta que, en el último método, no necesitas usar Cloud Storage.

Entrega archivos desde una secuencia de comandos

Si deseas entregar archivos desde tu app, importa la clase CloudStorageTools de App Engine:

use google\appengine\api\cloud_storage\CloudStorageTools;

Luego, usa CloudStorageTools::serve para entregar el archivo desde Google Cloud Storage:

CloudStorageTools::serve("gs://${my_bucket}/serve.txt");

Este método permite que el desarrollador determine la identidad del usuario y se asegure de que solo los usuarios autorizados accedan al archivo. La desventaja de este método es que tu aplicación debe ejecutar este código para entregar el archivo, lo que consume horas de instancia y, por lo tanto, genera un costo.

Entrega archivos directamente desde Google Cloud Storage

Existe una forma más rápida y rentable de entregar archivos que hacerlo desde la app, como se mencionó antes: entregarlos desde Cloud Storage directamente a través de HTTP. Los archivos se tienen que configurar para que usuarios anónimos los puedan leer en el momento de su escritura. Como mostraremos en el siguiente fragmento, debes configurar la opción de transmisión acl como public-read.

Una vez que el archivo se escribió en Cloud Storage con acceso público de lectura, debes obtener la URL pública del archivo con CloudStorageTools::getPublicUrl.

En el siguiente ejemplo, creamos un archivo con acceso público de lectura que contiene números aleatorios, lo escribimos en un bucket de Cloud Storage y redireccionamos a ese archivo desde Cloud Storage.

$options = ['gs' => ['acl' => 'public-read']];
$context = stream_context_create($options);
$fileName = "gs://${my_bucket}/public_file.txt";
file_put_contents($fileName, $publicFileText, 0, $context);

$publicUrl = CloudStorageTools::getPublicUrl($fileName, false);

La limitación de este método es que no hay control sobre quién accede al archivo porque cualquiera puede leerlo.

Cómo entregar archivos que subes con tu aplicación

Esta opción se describe en detalle en ¿Hay alguna otra forma de leer y escribir archivos?