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.
  • Gestisci i file da Google Cloud Storage, che li gestisce direttamente.
  • Gestione dei file caricati con l'app utilizzando il gestore statico in app.yaml.

Tieni presente che l'ultimo metodo non utilizza Cloud Storage.

Gestione dei file da uno script

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

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");

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

Pubblicazione di file direttamente da Google Cloud Storage

Esiste un modo più rapido ed economico 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 che siano leggibili dagli utenti anonimi al momento della scrittura. Come mostrato nello snippet di seguito, imposta l'opzione di stream acl su public-read.

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

Nell'esempio seguente, creiamo un file leggibile pubblicamente contenente alcuni numeri casuali, lo scriviamo in un bucket Cloud Storage e reindirizziamo a questo 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 esiste alcun controllo su chi può accedere al file, perché è leggibile da chiunque.

Pubblicazione dei file caricati con la tua app

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