Proporcionar acceso público a los archivos

Un caso de uso habitual es hacer que tus archivos sean accesibles públicamente a través de la Web. Puedes hacerlo en el entorno estándar de PHP 5 de cualquiera de estas formas:

  • Servir archivos de Google Cloud Storage desde una secuencia de comandos: tu aplicación sirve el archivo.
  • Publicar archivos desde Google Cloud Storage, que publica el archivo directamente.
  • Servir archivos subidos con tu aplicación mediante el controlador estático en app.yaml.

Ten en cuenta que la última metodología no usa Cloud Storage.

Servir archivos desde una secuencia de comandos

Si quieres servir archivos desde tu aplicación, importa la clase CloudStorageTools de App Engine:

use google\appengine\api\cloud_storage\CloudStorageTools;

Ahora, usa CloudStorageTools::serve para publicar el archivo desde Google Cloud Storage:

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

De esta forma, el desarrollador puede determinar la identidad del usuario y asegurarse de que solo los usuarios autorizados accedan al archivo. La desventaja de este enfoque es que tu aplicación debe ejecutar este código para servir el archivo, lo que consume horas de instancia y, por lo tanto, genera costes.

Servir archivos directamente desde Google Cloud Storage

Hay una forma más rápida y rentable de servir archivos que hacerlo desde la aplicación, como se ha mencionado anteriormente: servir los archivos directamente desde Cloud Storage a través de HTTP. Los archivos deben configurarse para que los usuarios anónimos puedan leerlos en el momento de escribir en ellos. Como mostraremos en el fragmento de código de abajo, debes definir la opción de flujo acl en public-read.

Una vez que el archivo se haya escrito en Cloud Storage como de lectura pública, debes obtener la URL pública del archivo mediante CloudStorageTools::getPublicUrl.

En el siguiente ejemplo, creamos un archivo de lectura pública que contiene algunos números aleatorios, lo escribimos en un segmento de Cloud Storage y redirigimos 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 se puede controlar quién puede acceder al archivo, ya que cualquier persona puede leerlo.

Publicar archivos subidos con tu aplicación

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