Como usar o Cloud Storage

Use o Cloud Storage para armazenar e disponibilizar arquivos como filmes, imagens ou outros conteúdos estáticos.

Neste documento, descrevemos como usar a biblioteca de cliente do Google Cloud no seu aplicativo para armazenar e recuperar dados do Cloud Storage.

Antes de começar

  • Siga as instruções no guia de início rápido de implantação do app "Hello, World!" em .NET no App Engine para configurar seu ambiente e projeto, bem como entender como os aplicativos em .NET são estruturados no App Engine. Anote e salve o ID do projeto. Você precisará dele para executar o aplicativo de amostra descrito neste documento.

  • Certifique-se de criar um bucket do Cloud Storage para o aplicativo invocando o seguinte comando:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Configure o bucket como acessível para leitura pública para que ele possa disponibilizar arquivos:

    gsutil defacl set public-read gs://[YOUR_BUCKET_NAME]
    
  • Para executar o aplicativo localmente, configure uma conta de serviço e faça o download das credenciais:

    1. Abra a lista de credenciais no console do Google Cloud.

      Abrir a lista de credenciais

    2. Clique em Criar credenciais.

    3. Selecione Chave da conta de serviço.

      A janela Criar chave da conta de serviço é exibida.

    4. Clique no menu suspenso abaixo de Conta de serviço e depois em Conta de serviço padrão do Compute Engine.

    5. Selecione JSON como Tipo de chave.

    6. Clique em Criar.

      Uma janela Nova chave privada é exibida e o download da chave privada é realizado automaticamente.

    7. Clique em Fechar.

    8. Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS com o caminho da chave JSON que foi salva. Por exemplo, no PowerShell:

      # For this powershell session.
      PS > $env:GOOGLE_APPLICATION_CREDENTIALS = "$env:USERPROFILE\Downloads\your-project-id-dea9fa230eae3.json"
      # For all processes created after this command.
      PS > [Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "$env:USERPROFILE\Downloads\your-project-id-dea9fa230eae3.json", "User")
      

Faça o download da amostra

  1. Faça o download do aplicativo de amostra e extraia-o.

  2. Se você estiver usando a linha de comando, navegue até o diretório do aplicativo, dotnet-docs-samples\appengine\flexible\.

Edite a configuração do projeto e instale as dependências

Em appsettings.json, defina BucketName. Esse valor é o nome do bucket do Cloud Storage criado anteriormente.

{
  "GoogleCloudStorage": {
    "BucketName": "your-google-bucket-name"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Código do aplicativo

O aplicativo de amostra apresenta uma página da Web que solicita ao usuário um arquivo para ser armazenado no Cloud Storage. Depois que o usuário seleciona o arquivo e clica em enviar, o gerenciador de upload carrega o conteúdo do arquivo em um blob e o salva no Cloud Storage.

Após o upload do arquivo no Cloud Storage, o URL público dele é retornado. É possível usá-lo para disponibilizar o arquivo diretamente do Cloud Storage. Armazene esse valor no app para uso futuro.

    public class HomeController : Controller
    {
        // Contains the bucket name and object name
        readonly CloudStorageOptions _options;
        // The Google Cloud Storage client.
        readonly StorageClient _storage;

        public HomeController(IOptions<CloudStorageOptions> options)
        {
            _options = options.Value;
            _storage = StorageClient.Create();
        }

        [HttpGet]
        public async Task<IActionResult> Index()
        {
            var model = new HomeIndex();
            if (new string[] { null, "", "your-google-bucket-name" }
                .Contains(_options.BucketName))
            {
                model.MissingBucketName = true;
                return View(model);
            }
            try
            {
                // Get the storage object.
                var storageObject =
                    await _storage.GetObjectAsync(_options.BucketName, _options.ObjectName);
                // Get a direct link to the storage object.
                model.MediaLink = storageObject.MediaLink;
                // Download the storage object.
                MemoryStream m = new MemoryStream();
                await _storage.DownloadObjectAsync(
                    _options.BucketName, _options.ObjectName, m);
                m.Seek(0, SeekOrigin.Begin);
                byte[] content = new byte[m.Length];
                m.Read(content, 0, content.Length);
                model.Content = Encoding.UTF8.GetString(content);
            }
            catch (GoogleApiException e)
            when (e.HttpStatusCode == System.Net.HttpStatusCode.NotFound)
            {
                // Does not exist yet.  No problem.
            }
            return View(model);
        }

        [HttpPost]
        public async Task<IActionResult> Index(Form sendForm)
        {
            var model = new HomeIndex();
            // Take the content uploaded in the form and upload it to
            // Google Cloud Storage.
            await _storage.UploadObjectAsync(
                _options.BucketName, _options.ObjectName, "text/plain",
                new MemoryStream(Encoding.UTF8.GetBytes(sendForm.Content)));
            model.Content = sendForm.Content;
            model.SavedNewContent = true;
            var storageObject =
                await _storage.GetObjectAsync(_options.BucketName, _options.ObjectName);
            model.MediaLink = storageObject.MediaLink;
            return View(model);
        }

Para saber mais

Consulte a documentação do Cloud Storage para informações completas.