Fornire l'accesso pubblico ai file

Un caso d'uso comune è rendere i file accessibili pubblicamente tramite il web. Puoi eseguire questa operazione 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 gestisce i file direttamente.
  • Per la pubblicazione di file caricati con la tua app viene utilizzato il gestore statico in app.yaml.

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

File disponibili per la pubblicazione 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 gestire il file da Google Cloud Storage:

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

La pubblicazione dei file dall'app in questo modo consente allo sviluppatore di determinare l'identità dell'utente e di assicurarsi che solo gli utenti autorizzati accedano al file. Lo svantaggio di questo approccio è che l'applicazione deve eseguire questo codice per gestire il file, il che consuma ore di istanza e comporta quindi dei costi.

File per la pubblicazione direttamente da Google Cloud Storage

Esiste un modo più rapido ed economico per pubblicare i file rispetto alla pubblicazione dall'app, come accennato sopra: fornire i file da Cloud Storage direttamente tramite HTTP. I file devono essere configurati per essere leggibili da utenti anonimi quando scrivono i file. Come mostreremo nello snippet seguente, imposti l'opzione di stream acl su public-read.

Dopo che il file è stato scritto in Cloud Storage come leggibile pubblicamente, devi ottenere l'URL pubblico del file utilizzando CloudStorageTools::getPublicUrl.

Nell'esempio seguente, creiamo un file leggibile dal pubblico contenente alcuni numeri casuali, lo scrivi in un bucket Cloud Storage e lo reindirizziamo 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 esiste un controllo su chi può accedere al file, poiché quest'ultimo è leggibile da chiunque.

File per la pubblicazione caricati con la tua app

Questa opzione è descritta in modo completo nella sezione Esiste un altro modo per leggere e scrivere file.