Cómo proporcionar acceso público a los archivos

Un caso práctico 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 entrega de forma directa.
  • Entregar archivos que se subieron con tu aplicación mediante el controlador estático en app.yaml.

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

Cómo entregar 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.

Cómo entregar archivos de forma directa desde Google Cloud Storage

Hay una manera más rápida y rentable de entregar archivos que hacerlo desde la aplicación, como se mencionó con anterioridad: entregarlos desde Cloud Storage directo a través de HTTP. Los archivos se tienen que configurar para que usuarios anónimos los puedan leer en el momento de la escritura. Como mostraremos en el fragmento de código a continuación, 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 depósito 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?