Aller au contenu principal

Stockage de fichiers

Le stockage de fichiers est la portion la plus pointilleuse de déployer sur Azure App Services.

En effet, le stockage sur App Services est éphémère, c'est-à-dire qu'il n'y a pas un disque dur associé au déploiement sur lequel on peut s'appuyer. Cela pose problème pour l'envoi de fichier qui s'appuie sur un chemin d'accès sur le disque local pour sauvegarder les fichiers.

Pour que le stockage soit fonctionnel, on devra utiliser un service d'Azure appelé File Storage et ensuite monter un chemin d'accès virtuel vers ce service de stockage!

Créer un compte de stockage

  1. Faites une recherche pour Stockage et sélectionnez le service Comptes de stockage Imgur
  2. Créez un nouveau compte de stockage à l'aide du bouton + Créer
  3. Assignez un groupe de ressources, un nom et une région à votre compte de stockage Imgur
  4. Conservez toutes les autres options par défaut

Créer un partage de fichiers

Pour que votre serveur Web puisse accéder au compte de stockage, on doit créer dans ce dernier un dossier de fichiers partagés.

  1. Assurez-vous d'être à l'intérieur de votre compte de stockage
  2. Allez à la section Partages de fichiers Imgur
  3. Créez un nouveau partage de fichier en appuyant sur + Partage de fichiers.
  4. Vous pouvez simplement le nommer et garder les valeurs par défaut. J'ai appelé le mien dans les captures d'écran simplement fichiers. Imgur

Monter le stockage

Pour que votre application sur App Services puisse communiquer avec votre dossier partagé, vous devez "monter" le stockage dans l'application et créer un répertoire virtuel qui pointe vers le stockage monté.

  1. Allez dans la section Configuration de votre application
  2. Sélectionnez l'onglet Mappages de chemin d'accès
  3. Sous Monter le stockage, appuyez sur + Nouveau montage de stockage Azure
  4. Entrez les paramètres
    1. Nom: Un nom pour identifier le stockage
    2. Options de configuration: De base
    3. Comptes de stockage: sélectionnez votre compte créé précédemment
    4. Conteneur de stockage: votre dossier de fichiers partagé
    5. Chemin de montage: il s'agit du chemin d'accès virtuel sur le serveur. Le nom n'a pas d'importance, tant que vous en prenez note et réutilisez le bon. J'ai utilisé /mounts/storage
  5. Appuyer sur OK et sauvegarder

Imgur

Créer le répertoire virtuel

  1. Sous Applications et répertoires virtuels, appuyez sur + Nouvelle application virtuelle ou nouveau répertoire virtuel
  2. Entrez les paramètres
    1. Entrez un chemin d'accès virtuel (ex.: /storage).
    2. Pour le chemin d'accès physique, entrez le lien vers votre stockage monté précédemment (ex.: \mounts\storage)
    3. Cochez Annuaire
  3. Appuyez sur OK

Imgur

Modifier l'application

Stockage statique (lecture de fichier)

Pour la lecture de fichiers, vous avez probablement une ligne de ce genre dans Program.cs:

program.cs
app.UseStaticFiles()
.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.GetFullPath(
Path.Combine(builder.Environment.ContentRootPath,
"../",
builder.Configuration["DossierStorage"]!))),
RequestPath = "/storage"
});

Vous devrez faire en sorte qu'en production, le dossier soit simplement /mounts/storage (à adapter selon votre dossier de stockage monté).

Par exemple:

if (app.Environment.IsProduction())
{
app.UseStaticFiles()
.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider("/mounts/storage"),
RequestPath = "/storage"
});
} else {
// en développement...
}

L'idéal serait de ne pas dupliquer app.UseStaticFiles() et compagnie deux fois, mais de simplement changer le FileProvider en fonction de si on est en développement ou production.

Écriture de fichiers

Vous avez surement un bloc de code similaire à celui-ci pour le FileStorage si vous supportez l'envoi de fichiers dans votre application:

program.cs
  builder.Services.AjouterFileStorage(
Path.GetFullPath(
Path.Combine(builder.Environment.ContentRootPath,
"../",
builder.Configuration["DossierStorage"]!)));

Dans la même lignée que précédemment, vous devrez plutôt faire pointer vers le dossier de stockage /mounts/storage lorsqu'en production.

if (builder.Environment.EnvironmentName == "Production")
{
builder.Services.AjouterFileStorage("/mounts/storage");
}
else
{
// en développement ...
}