Aller au contenu principal
Page migrée

Contenu hérité de l'ancienne documentation, en attente de réécriture.

Introduction

Si votre application doit utiliser un service de stockage de fichier dans le Cloud (Azure, Aws, ...) il est recommandé d'utiliser le service définis par l'interface ICloudStorage du toolkit Lagoon. Cette interface expose les principales méthodes de manipulation de fichier pour Azure Blob Storage et AWS S3

Notions propres au fournisseur de stockage dans le cloud​

Lors de la manipulation de stockage dans le cloud, la notion de container (pour Azure) ou bucket (pour AWS) remplace la notion de "dossier de stockage" : on upload un fichier dans un container, et on le télécharge depuis un container. Habituellement une application n'a besoin que d'un seul container (ou bucket) pour stocker ses fichiers.   Les containers ou buckets ne gèrent pas directement la notion de dossier cependant le caractère "/" dans le nom du fichier permet de simuler une arborescence dans l'interface de gestion des fichiers. Par exemple un fichier nommé "export/data.zip" dans un container nommé app-data simulera le comportement d'un dossier dans l'interface de gestion fournis par AWS ou Azure : |--app-data |----export |------test.zip

Parttern de téléchargement d'un fichier avec un service cloud​

Habituellement lorsque vous souhaitez envoyer un fichier vous le faite directement depuis un Controlleur de votre application. Pour profiter au maximum du service de stockage cloud, au lieu d'envoyer directement le fichier depuis votre Controlleur, il faut demander au cloud provider de générer un lien de téléchargement et le retourner au client. Le client pourra ensuite télécharger le fichier directement auprès du fournisseur de stockage (et notre serveur ne s'occupe pas de faire transiter les données du fichier)   Vue schématique du téléchargement d'un fichier:

Mise en place

Ajouter le package Lagoon.Storage.Azure ou Lagoon.Storage.AWS a votre projet et activer le service:

/// <summary>
/// Register the services for the application.
/// </summary>
/// <param name="services">The service collection.</param>
/// <remarks>The base implementation does nothing.</remarks>
protected override void OnConfigureServices(IServiceCollection services)
{
// For Azure with Lagoon.Storage.Azure
services.AddCloudStorage<AzureStorage>();
// For AWS with Lagoon.Storage.Aws
services.AddCloudStorage<AwsStorage>();
}

Configuration

Azure​

Configurer le fichier appSettings.json pour utiliser Azure Blob Storage:

"CloudStorage": {
"Azure": {
"StorageAccountName": null,
"ConnectionString": "DefaultEndpointsProtocol=https;AccountName=**XX**;AccountKey=**YY**;EndpointSuffix=core.windows.net"
}
}

En fonction de la configuration de service Azure Blob Storage, vous devrait soit définir la clef:

  • StorageAccountName: Si Azure est configuré pour utiliser AzureDefaultIdentity
  • ConnectionString: Si Azure est configuré avec une paire AccountName / AccoutKey

AWS​

Local​

Afin de simuler le fonctionnement cloud, vous pouvez configurer votre appSettings.Develoment.json :

"CloudStorage": {
"Local": {
"RootPath": "C:\\Temp\\DraftData\\"
}
}

Les containers (ou buckets) seront créé à la racine du dossier spécifier par la clef CloudStorage:Local:RootPath

Utilisation

Injecté le service ICloudStorage dans votre controlleur

[Authorize()]
[Route("api/[controller]")]
public class DownloadController : LgControllerBase
{
private readonly ICloudStorage _storage;

public DownloadController(ICloudStorage storage)
{
_storage = storage;
}

}

Exemple de generation d'un lien de téléchargement pour un fichier*​

[HttpGet("GetDownloadLink/{id:guid}")]
public ActionResult<string> GetDownloadLink(Guid id)
{
_ = id; // Should be used to retrieve doc info (bucket and path)
return Ok(_storage.GeneratePresignedUrl("my-bucket", "test/test.zip", 0.1));
}