Utilizzo di Cloud Storage

Puoi utilizzare Cloud Storage per archiviare e pubblicare file, come filmati o immagini o altri contenuti statici.

Questo documento descrive come utilizzare la libreria client di Google Cloud nell'app per archiviare dati e recuperare dati da Cloud Storage.

Prima di iniziare

  • Segui le istruzioni in "Hello, World!" per .NET su App Engine per configurare l'ambiente e il progetto e per comprendere in che modo le app .NET sono strutturate in App Engine. Annota e salva l'ID progetto, perché è necessario per eseguire l'applicazione di esempio descritta in questo documento.

  • Assicurati di creare un bucket di Cloud Storage per la tua applicazione richiamando il seguente comando:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Rendi il bucket pubblicamente pubblico in modo che possa gestire file:

    gsutil defacl set public-read gs://[YOUR_BUCKET_NAME]
    
  • Per eseguire l'applicazione in locale, configura un account di servizio e scarica le credenziali:

    1. Apri l'elenco delle credenziali in Google Cloud Console.

      Apri l'elenco delle credenziali

    2. Fai clic su Create credentials (Crea credenziali).

    3. Seleziona Service account key (Chiave account di servizio).

      Si apre la finestra Crea chiave account di servizio.

    4. Fai clic sulla casella a discesa sotto Account di servizio, quindi fai clic su Account di servizio predefinito di Compute Engine.

    5. Seleziona JSON come Tipo di chiave.

    6. Fai clic su Crea.

      Viene visualizzata la finestra Nuova chiave privata e la chiave privata per viene scaricata automaticamente.

    7. Fai clic su Chiudi.

    8. Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso della chiave JSON che è stata scaricata. Ad esempio, in 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")
      

Scarica l'anteprima

  1. Scarica l'app di esempio ed estraila.

  2. Se utilizzi la riga di comando, vai alla directory dell'applicazione: dotnet-docs-samples\appengine\flex.

Modifica la configurazione del progetto e installa le dipendenze

In appsettings.json, imposta BucketName; questo valore è il nome del bucket di Cloud Storage che hai creato in precedenza.

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

Codice dell'applicazione

L'applicazione di esempio presenta una pagina web che chiede all'utente di fornire un file da archiviare in Cloud Storage. Quando l'utente seleziona un file e fa clic su Invia, il gestore del caricamento carica il contenuto del file in un blob e lo scrive in Cloud Storage.

Nota che, dopo il caricamento in Cloud Storage, viene restituito l'URL pubblico del file, che puoi utilizzare per pubblicare il file direttamente da Cloud Storage. Conserva questo valore nella tua app per usi futuri.

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

Per ulteriori informazioni

Per informazioni complete su Cloud Storage, consulta la documentazione di Cloud Storage.