Fournir un accès public aux fichiers

Un cas d'utilisation courant consiste à rendre vos fichiers accessibles au public via le Web. Pour effectuer cette opération dans l'environnement standard PHP 5, plusieurs méthodes sont possibles :

  • Diffuser des fichiers dans Google Cloud Storage à partir d'un script : votre application diffuse le fichier.
  • Diffuser directement des fichiers à partir de Google Cloud Storage.
  • Diffuser des fichiers importés avec votre application à l'aide du gestionnaire de fichiers statiques dans le fichier app.yaml.

Notez que la dernière méthode n'utilise pas Cloud Storage.

Diffuser des fichiers à partir d'un script

Si vous souhaitez diffuser des fichiers à partir de votre application, importez la classe CloudStorageTools App Engine :

use google\appengine\api\cloud_storage\CloudStorageTools;

Appliquez maintenant la méthode CloudStorageTools::serve pour diffuser les fichiers à partir de Google Cloud Storage :

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

Cette manière de diffuser les fichiers à partir de l'application permet au développeur d'identifier les utilisateurs et de s'assurer que seuls les utilisateurs autorisés ont accès au fichier. Cette approche présente un inconvénient : votre application doit exécuter ce code pour diffuser le fichier. Cela consomme des heures d'utilisation de l'instance, et entraîne donc une augmentation des coûts.

Diffuser des fichiers directement depuis Google Cloud Storage

Pour diffuser des fichiers, il existe un autre moyen plus rapide et plus économique que celui indiqué ci-dessus via l'application : les diffuser à partir de Cloud Storage directement via HTTP. Pour cela, les fichiers doivent être configurés de sorte que des utilisateurs anonymes puissent les lire au moment de leur écriture. Comme vous pourrez le voir dans l'extrait ci-dessous, vous devez définir l'option de flux acl sur public-read.

Une fois que le fichier est écrit dans Cloud Storage comme lisible publiquement, vous devez obtenir son URL publique à l'aide de la méthode CloudStorageTools::getPublicUrl.

Dans l'exemple suivant, nous créons un fichier lisible publiquement contenant des nombres aléatoires. Nous l'écrivons dans un bucket Cloud Storage et le redirigeons vers ce fichier depuis 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);

Cette approche présente toutefois une limitation. En effet, il n'existe aucun contrôle qui permette de déterminer qui peut accéder au fichier, car il est lisible par tout le monde.

Diffuser des fichiers transférés avec votre application

Cette option est décrite en détail dans la section Existe-t-il un autre moyen de lire et d'écrire des fichiers ?