Disponibilizar acesso público a ficheiros

Um exemplo de utilização comum é tornar os seus ficheiros acessíveis publicamente através da Web. Pode fazê-lo no ambiente padrão do PHP 5 de qualquer uma das seguintes formas:

  • Publicar ficheiros no Google Cloud Storage a partir de um script: a sua app publica o ficheiro.
  • Publicar ficheiros a partir do Google Cloud Storage, que publica o ficheiro diretamente.
  • Apresentar ficheiros carregados com a sua app através do controlador estático em app.yaml.

Tenha em atenção que a última metodologia não usa o Cloud Storage.

Publicar ficheiros a partir de um script

Se quiser publicar ficheiros a partir da sua app, importe a classe App Engine CloudStorageTools:

use google\appengine\api\cloud_storage\CloudStorageTools;

Agora, use CloudStorageTools::serve para disponibilizar o ficheiro a partir do Google Cloud Storage:

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

A publicação de ficheiros a partir da app desta forma permite ao programador determinar a identidade do utilizador e garantir que apenas os utilizadores autorizados acedem ao ficheiro. A desvantagem desta abordagem é que a sua aplicação tem de executar este código para publicar o ficheiro, o que consome horas de instância e, por conseguinte, gera custos.

Publicação de ficheiros diretamente a partir do Google Cloud Storage

Existe uma forma mais rápida e económica de publicar ficheiros do que publicá-los a partir da app, como mencionado acima: publicá-los a partir do Cloud Storage diretamente através de HTTP. Os ficheiros têm de ser configurados para serem legíveis por utilizadores anónimos no momento da escrita dos ficheiros. Como vamos mostrar no fragmento abaixo, define a opção de stream acl como public-read.

Assim que o ficheiro for escrito no Cloud Storage como publicamente legível, tem de obter o URL público do ficheiro através de CloudStorageTools::getPublicUrl.

No exemplo seguinte, criamos um ficheiro legível publicamente que contém alguns números aleatórios, escrevemo-lo num contentor do Cloud Storage e redirecionamos para esse ficheiro a partir do 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);

A limitação desta abordagem é que não existe controlo sobre quem pode aceder ao ficheiro, porque o ficheiro é legível por qualquer pessoa.

Publicar ficheiros carregados com a sua app

Esta opção está totalmente descrita em Existe outra forma de ler e escrever ficheiros.