Fornire l'accesso pubblico ai file

Un caso d'uso comune è rendere i file accessibili pubblicamente tramite il web. Puoi farlo nell'ambiente standard PHP 5 in uno dei seguenti modi:

  • Pubblica i file in Google Cloud Storage da uno script: la tua app pubblica il file.
  • Pubblica i file da Google Cloud Storage, che li pubblica direttamente.
  • Pubblicazione dei file caricati con la tua app utilizzando il gestore statico in app.yaml.

Tieni presente che l'ultima metodologia non utilizza Cloud Storage.

Pubblicazione di file da uno script

Se vuoi pubblicare file dalla tua app, importa la classe CloudStorageTools di App Engine:

use google\appengine\api\cloud_storage\CloudStorageTools;

Ora utilizza CloudStorageTools::serve per pubblicare il file da Google Cloud Storage:

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

In questo modo, lo sviluppatore può determinare l'identità dell'utente e assicurarsi che solo gli utenti autorizzati accedano al file. Lo svantaggio di questo approccio è che l'applicazione deve eseguire questo codice per pubblicare il file, il che consuma ore di istanza e comporta quindi un costo.

Pubblicazione di file direttamente da Google Cloud Storage

Esiste un modo più rapido e conveniente per pubblicare i file rispetto alla pubblicazione dall'app, come indicato sopra: pubblicarli direttamente da Cloud Storage tramite HTTP. I file devono essere configurati in modo da essere leggibili dagli utenti anonimi al momento della scrittura. Come mostrato nello snippet di seguito, imposta l'opzione stream acl su public-read.

Una volta scritto il file in Cloud Storage come pubblicamente leggibile, devi recuperare l'URL pubblico del file utilizzando CloudStorageTools::getPublicUrl.

Nell'esempio seguente, creiamo un file leggibile pubblicamente contenente alcuni numeri random, lo scriviamo in un bucket Cloud Storage e reindirizziamo a quel file da 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);

Il limite di questo approccio è che non è possibile controllare chi può accedere al file, in quanto è leggibile da chiunque.

Pubblicazione dei file caricati con la tua app

Questa opzione è descritta in modo completo nella sezione Esistono altri modi per leggere e scrivere file.