Partager via


Stocker et accéder aux données dans Stockage Azure à partir deXamarin.Forms

Stockage Azure est une solution de stockage cloud évolutive qui peut être utilisée pour stocker des données non structurées et structurées. Cet article montre comment stocker Xamarin.Forms du texte et des données binaires dans Stockage Azure et comment accéder aux données.

Stockage Azure fournit quatre services de stockage :

  • Stockage d'objets blob. Un objet blob peut être des données texte ou binaires, telles que des sauvegardes, des machines virtuelles, des fichiers multimédias ou des documents.
  • La table Stockage est un magasin d’attributs de clé NoSQL.
  • La Stockage file d’attente est un service de messagerie pour le traitement et la communication de flux de travail entre les services cloud.
  • Le Stockage de fichiers fournit un stockage partagé à l’aide du protocole S Mo.

Il existe deux types de comptes de stockage :

  • Un compte de stockage à usage général permet d’accéder aux services Stockage Azure à partir d’un seul compte.
  • Un compte de stockage d’objets blob est un compte de stockage spécialisé pour le stockage d’objets blob. Ce type de compte est recommandé lorsque vous devez uniquement stocker des données d’objet blob.

Cet article, ainsi que l’exemple d’application associé, illustre le chargement des fichiers image et texte dans le stockage d’objets blob et leur téléchargement. En outre, il illustre également la récupération d’une liste de fichiers à partir du stockage d’objets blob et la suppression de fichiers.

Pour plus d’informations sur Stockage Azure, consultez Présentation de Stockage.

Remarque

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Présentation de Stockage Blob

Le stockage d’objets blob se compose de trois composants, présentés dans le diagramme suivant :

Concepts Stockage Blob

Tout l’accès à Stockage Azure est via un compte de stockage. Un compte de stockage peut contenir un nombre illimité de conteneurs et un conteneur peut stocker un nombre illimité d’objets blob, jusqu’à la limite de capacité du compte de stockage.

Un objet blob est un fichier de n’importe quel type et taille. Stockage Azure prend en charge trois types d’objets blob différents :

  • Les objets blob de blocs sont optimisés pour la diffusion en continu et le stockage d’objets cloud, et constituent un bon choix pour stocker des sauvegardes, des fichiers multimédias, des documents, etc. Les objets blob de blocs peuvent atteindre jusqu’à 195 Go de taille.
  • Les objets blob d’ajout sont similaires aux objets blob de blocs, mais sont optimisés pour les opérations d’ajout, telles que la journalisation. Les objets blob d’ajout peuvent atteindre jusqu’à 195 Go de taille.
  • Les objets blob de pages sont optimisés pour les opérations de lecture/écriture fréquentes et sont généralement utilisés pour stocker des machines virtuelles et leurs disques. Les objets blob de pages peuvent atteindre jusqu’à 1 To de taille.

Remarque

Notez que les comptes de stockage d’objets blob prennent en charge les objets blob de blocs et d’ajout, mais pas les objets blob de pages.

Un objet blob est chargé dans Stockage Azure et téléchargé à partir de Stockage Azure, sous la forme d’un flux d’octets. Par conséquent, les fichiers doivent être convertis en flux d’octets avant le chargement et convertis en leur représentation d’origine après le téléchargement.

Chaque objet stocké dans Stockage Azure a une adresse URL unique. Le nom du compte de stockage forme le sous-domaine de cette adresse, et la combinaison de sous-domaine et de nom de domaine forme un point de terminaison pour le compte de stockage. Par exemple, si votre compte de stockage est nommé mystorageaccount, le point de terminaison d’objet blob par défaut du compte de stockage est https://mystorageaccount.blob.core.windows.net.

L’URL permettant d’accéder à un objet dans un compte de stockage est constituée de l’ajout de l’emplacement de l’objet dans le compte de stockage au point de terminaison. Par exemple, une adresse d’objet blob aura le format https://mystorageaccount.blob.core.windows.net/mycontainer/myblob.

Programme d’installation

Le processus d’intégration d’un compte Stockage Azure dans une Xamarin.Forms application est le suivant :

  1. Créez un compte de stockage. Pour plus d’informations, consultez la rubrique Création d’un compte de stockage .
  2. Ajoutez la bibliothèque cliente Stockage Azure à l’applicationXamarin.Forms.
  3. Configurez le chaîne de connexion de stockage. Pour plus d’informations, consultez Connecter ing pour Stockage Azure.
  4. Ajoutez des using directives pour les espaces de noms et Microsoft.WindowsAzure.Storage.Blob les Microsoft.WindowsAzure.Storage classes qui accèderont à Stockage Azure.

Connexion à Stockage Azure

Chaque requête effectuée sur les ressources du compte de stockage doit être authentifiée. Bien que les objets blob puissent être configurés pour prendre en charge l’authentification anonyme, il existe deux approches principales qu’une application peut utiliser pour s’authentifier auprès d’un compte de stockage :

  • Clé partagée. Cette approche utilise le nom et la clé de compte Stockage Azure pour accéder aux services de stockage. Un compte de stockage reçoit deux clés privées lors de la création qui peuvent être utilisées pour l’authentification par clé partagée.
  • Signature d’accès partagé. Il s’agit d’un jeton qui peut être ajouté à une URL qui permet l’accès délégué à une ressource de stockage, avec les autorisations qu’il spécifie, pendant la période pendant laquelle il est valide.

les chaînes d’Connecter ion peuvent être spécifiées qui incluent les informations d’authentification requises pour accéder aux ressources Stockage Azure à partir d’une application. En outre, un chaîne de connexion peut être configuré pour se connecter à l’émulateur de stockage Azure à partir de Visual Studio.

Remarque

Stockage Azure prend en charge HTTP et HTTPS dans un chaîne de connexion. Toutefois, l’utilisation de HTTPS est recommandée.

Connecter à l’émulateur de Stockage Azure

L’émulateur de stockage Azure fournit un environnement local qui émule les services d’objets blob, de file d’attente et de table Azure à des fins de développement.

Les chaîne de connexion suivantes doivent être utilisées pour se connecter à l’émulateur de stockage Azure :

UseDevelopmentStorage=true

Pour plus d’informations sur l’émulateur de stockage Azure, consultez Utiliser l’émulateur de stockage Azure pour le développement et les tests.

Connecter à Stockage Azure à l’aide d’une clé partagée

Le format chaîne de connexion suivant doit être utilisé pour se connecter à Stockage Azure avec une clé partagée :

DefaultEndpointsProtocol=[http|https];AccountName=myAccountName;AccountKey=myAccountKey

myAccountName doit être remplacé par le nom de votre compte de stockage et myAccountKey doit être remplacé par l’une de vos deux clés d’accès de compte.

Remarque

Lorsque vous utilisez l’authentification par clé partagée, le nom de votre compte et la clé de compte sont distribués à chaque personne qui utilise votre application, ce qui fournit un accès en lecture/écriture complet au compte de stockage. Par conséquent, utilisez l’authentification par clé partagée uniquement à des fins de test et ne distribuez jamais de clés à d’autres utilisateurs.

Connecter à Stockage Azure à l’aide d’une signature d’accès partagé

Le format chaîne de connexion suivant doit être utilisé pour se connecter à Stockage Azure avec une SAP :

BlobEndpoint=myBlobEndpoint;SharedAccessSignature=mySharedAccessSignature

myBlobEndpoint doit être remplacé par l’URL de votre point de terminaison d’objet blob et mySharedAccessSignature doit être remplacé par votre SAP. La SAP fournit le protocole, le point de terminaison de service et les informations d’identification pour accéder à la ressource.

Remarque

L’authentification SAP est recommandée pour les applications de production. Toutefois, dans une application de production, la SAP doit être récupérée à partir d’un service back-end à la demande, au lieu d’être regroupée avec l’application.

Pour plus d’informations sur les signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP).

Création d’un conteneur

La GetContainer méthode est utilisée pour récupérer une référence à un conteneur nommé, qui peut ensuite être utilisée pour récupérer des objets blob à partir du conteneur ou pour ajouter des objets blob au conteneur. L’exemple de code suivant montre la méthode GetContainer :

static CloudBlobContainer GetContainer(ContainerType containerType)
{
  var account = CloudStorageAccount.Parse(Constants.StorageConnection);
  var client = account.CreateCloudBlobClient();
  return client.GetContainerReference(containerType.ToString().ToLower());
}

La CloudStorageAccount.Parse méthode analyse une chaîne de connexion et retourne une CloudStorageAccount instance qui représente le compte de stockage. Une CloudBlobClient instance, utilisée pour récupérer des conteneurs et des objets blob, est ensuite créée par la CreateCloudBlobClient méthode. La GetContainerReference méthode récupère le conteneur spécifié en tant qu’instance CloudBlobContainer , avant qu’elle ne soit retournée à la méthode appelante. Dans cet exemple, le nom du conteneur est la ContainerType valeur d’énumération, convertie en chaîne en minuscules.

Remarque

Les noms de conteneur doivent être en minuscules et doivent commencer par une lettre ou un nombre. En outre, ils ne peuvent contenir que des lettres, des chiffres et le caractère de tiret, et doivent être compris entre 3 et 63 caractères.

La GetContainer méthode est appelée comme suit :

var container = GetContainer(containerType);

L’instance CloudBlobContainer peut ensuite être utilisée pour créer un conteneur s’il n’existe pas encore :

await container.CreateIfNotExistsAsync();

Par défaut, un conteneur nouvellement créé est privé. Cela signifie qu’une clé d’accès de stockage doit être spécifiée pour récupérer des objets blob à partir du conteneur. Pour plus d’informations sur la création d’objets blob dans un conteneur public, consultez Créer un conteneur.

Chargement de données dans un conteneur

La UploadFileAsync méthode est utilisée pour charger un flux de données d’octets dans le stockage d’objets blob et est illustrée dans l’exemple de code suivant :

public static async Task<string> UploadFileAsync(ContainerType containerType, Stream stream)
{
  var container = GetContainer(containerType);
  await container.CreateIfNotExistsAsync();

  var name = Guid.NewGuid().ToString();
  var fileBlob = container.GetBlockBlobReference(name);
  await fileBlob.UploadFromStreamAsync(stream);

  return name;
}

Après avoir récupéré une référence de conteneur, la méthode crée le conteneur s’il n’existe pas déjà. Une nouvelle Guid est ensuite créée pour agir en tant que nom d’objet blob unique, et une référence de bloc d’objets blob est récupérée en tant qu’instance CloudBlockBlob . Le flux de données est ensuite chargé sur l’objet blob à l’aide de la UploadFromStreamAsync méthode, ce qui crée l’objet blob s’il n’existe pas déjà ou le remplace s’il existe.

Avant qu’un fichier puisse être chargé dans le stockage d’objets blob à l’aide de cette méthode, il doit d’abord être converti en flux d’octets. Ceci est illustré dans l’exemple de code suivant :

var byteData = Encoding.UTF8.GetBytes(text);
uploadedFilename = await AzureStorage.UploadFileAsync(ContainerType.Text, new MemoryStream(byteData));

Les text données sont converties en tableau d’octets, qui est ensuite encapsulée en tant que flux transmis à la UploadFileAsync méthode.

Téléchargement de données à partir d’un conteneur

La GetFileAsync méthode est utilisée pour télécharger des données d’objet blob à partir de Stockage Azure et est illustrée dans l’exemple de code suivant :

public static async Task<byte[]> GetFileAsync(ContainerType containerType, string name)
{
  var container = GetContainer(containerType);

  var blob = container.GetBlobReference(name);
  if (await blob.ExistsAsync())
  {
    await blob.FetchAttributesAsync();
    byte[] blobBytes = new byte[blob.Properties.Length];

    await blob.DownloadToByteArrayAsync(blobBytes, 0);
    return blobBytes;
  }
  return null;
}

Après avoir récupéré une référence de conteneur, la méthode récupère une référence d’objet blob pour les données stockées. Si l’objet blob existe, ses propriétés sont récupérées par la FetchAttributesAsync méthode. Un tableau d’octets de la taille correcte est créé et l’objet blob est téléchargé sous la forme d’un tableau d’octets qui est retourné à la méthode appelante.

Après avoir téléchargé les données d’octets d’objet blob, elles doivent être converties en représentation d’origine. Ceci est illustré dans l’exemple de code suivant :

var byteData = await AzureStorage.GetFileAsync(ContainerType.Text, uploadedFilename);
string text = Encoding.UTF8.GetString(byteData);

Le tableau d’octets est récupéré à partir de Stockage Azure par la GetFileAsync méthode, avant qu’il ne soit converti en chaîne encodée UTF8.

Liste des données dans un conteneur

La GetFilesListAsync méthode est utilisée pour récupérer une liste d’objets blob stockés dans un conteneur et est illustrée dans l’exemple de code suivant :

public static async Task<IList<string>> GetFilesListAsync(ContainerType containerType)
{
  var container = GetContainer(containerType);

  var allBlobsList = new List<string>();
  BlobContinuationToken token = null;

  do
  {
    var result = await container.ListBlobsSegmentedAsync(token);
    if (result.Results.Count() > 0)
    {
      var blobs = result.Results.Cast<CloudBlockBlob>().Select(b => b.Name);
      allBlobsList.AddRange(blobs);
    }
    token = result.ContinuationToken;
  } while (token != null);

  return allBlobsList;
}

Après avoir récupéré une référence de conteneur, la méthode utilise la méthode du ListBlobsSegmentedAsync conteneur pour récupérer des références aux objets blob au sein du conteneur. Les résultats retournés par la ListBlobsSegmentedAsync méthode sont énumérés alors que l’instance BlobContinuationToken n’est pas null. Chaque objet blob est converti à partir de l’objet blob retourné IListBlobItem dans un CloudBlockBlob ordre d’accès à la Name propriété de l’objet blob, avant d’ajouter la valeur à la allBlobsList collection. Une fois l’instance BlobContinuationTokennullterminée, le nom du dernier objet blob a été retourné et l’exécution quitte la boucle.

Suppression de données d’un conteneur

La DeleteFileAsync méthode est utilisée pour supprimer un objet blob d’un conteneur et est illustrée dans l’exemple de code suivant :

public static async Task<bool> DeleteFileAsync(ContainerType containerType, string name)
{
  var container = GetContainer(containerType);
  var blob = container.GetBlobReference(name);
  return await blob.DeleteIfExistsAsync();
}

Après avoir récupéré une référence de conteneur, la méthode récupère une référence d’objet blob pour l’objet blob spécifié. L’objet blob est ensuite supprimé avec la DeleteIfExistsAsync méthode.