Utiliser Cloud Storage

Vous pouvez utiliser Cloud Storage pour stocker et diffuser des fichiers, tels que des films, des images ou d'autres contenus statiques.

Ce document explique comment utiliser la bibliothèque cliente Google Cloud dans votre application afin de stocker et de récupérer des données dans Cloud Storage.

Avant de commencer

  • Suivez les instructions de la section "Hello, World!" pour .NET sur App Engine afin de configurer votre environnement et votre projet, et pour comprendre la structure des applications .NET dans App Engine. Notez et enregistrez l'ID de votre projet. Vous en aurez besoin pour exécuter l'exemple d'application décrit dans ce document.

  • Veillez à créer un bucket Cloud Storage pour votre application en appelant la commande suivante :

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Rendez le bucket lisible publiquement afin qu'il puisse diffuser des fichiers :

    gsutil defacl set public-read gs://[YOUR_BUCKET_NAME]
    
  • Pour exécuter votre application localement, configurez un compte de service et téléchargez les identifiants :

    1. Ouvrez la liste des identifiants dans Google Cloud Console.

      Ouvrir la liste des identifiants

    2. Cliquez sur Créer des identifiants.

    3. Sélectionnez la clé de compte de service.

      Une fenêtre Créer une clé de compte de service s'ouvre.

    4. Cliquez sur la boîte déroulante sous Compte de service, puis sur Compte de service Compute Engine par défaut.

    5. Sélectionnez JSON pour le type de clé.

    6. Cliquez sur Créer.

      Une fenêtre Nouvelle clé privée s'affiche, et la clé privée est automatiquement téléchargée.

    7. Cliquez sur Fermer.

      .
    8. Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS sur le chemin de la clé JSON téléchargée. Par exemple, dans 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")
      

Télécharger l'exemple

  1. Téléchargez l'exemple d'application et extrayez-le.

  2. Si vous utilisez la ligne de commande, accédez au répertoire de l'application (dotnet-docs-samples\appengine\flexible).

Modifier la configuration du projet et installer les dépendances

Dans appsettings.json, définissez BucketName. Cette valeur correspond au nom du bucket Cloud Storage que vous avez créé précédemment.

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

Code de l'application

L'exemple d'application présente une page Web invitant l'utilisateur à indiquer un fichier à stocker dans Cloud Storage. Lorsque l'utilisateur sélectionne un fichier et clique sur "Envoyer", le gestionnaire d'importation charge le contenu du fichier dans un blob et l'écrit dans Cloud Storage.

Notez qu'après le transfert du fichier dans Cloud Storage, l'URL publique de ce fichier est renvoyée. Vous pouvez l'utiliser pour diffuser le fichier directement à partir de Cloud Storage. Vous devez stocker cette valeur dans votre application pour une utilisation ultérieure.

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

Pour en savoir plus

Pour obtenir des informations complètes sur Cloud Storage, consultez la documentation Cloud Storage.