Télécharger l'archive à partir de l'application Web ASP.NET

Télécharger l’archive depuis le serveur

Il s’agit d’une fonctionnalité courante pour les applications Web permettant de télécharger un fichier à partir de votre serveur Web. Pour réduire la taille des données transférées par câble, vous souhaiterez peut-être compresser le fichier. Il est pratique pour un utilisateur de choisir le format de l’archive à télécharger. Cet exemple vous donne quelques informations sur la façon de le gérer.

Préparer l’application Web ASP.NET

À l’aide de Visual Studio, composez l’application Web ASP.NET Core. Que ce soit une simple application Web avec Razor Pages. À l’aide de NuGet Package Manager, vous incluez deux packages pour votre projet : Aspose.Zip pour la compression et Aspose.BarCode pour la génération d’exemples de données.
Recherchez la page Index.cshtml dans votre Explorateur de solutions. Maintenant, ajoutez un formulaire à cette page avec un bouton de soumission à l’intérieur. Il fallait lancer la demande de téléchargement par l’utilisateur.
Ajoutez à cette page le balisage HTML suivant :

1<form method="post">    
2    <input type="submit" value="Download" />
3</form>

Liste des formats d’archives

Pour cet exemple, nous avons choisi trois des formats d’archive pris en charge par Aspose.ZIP : ZIP, Bzip2, 7z. Composez une énumération pour les formats marquant ses membres avec DisplayAttribute
Le code d’énumération sera :

 1  énumération publique ArchiveFormat
 2  {
 3      [Affichage(Nom = "ZIP")]
 4      Fermeture éclair,
 5
 6      [Display(Name = "Bzip2")]
 7      Bz2,
 8
 9      [Display(Name = "7z")]
10      SevenZip
11  }

Ensuite, vous devez créer une liste déroulante dans le formulaire Web. C’est assez simple avec l’assistant HTML GetEnumSelectList - pas besoin de générer des éléments avec une boucle. Insérez simplement l’extrait suivant dans votre formulaire sur Index.cshtml :

1<select name="archiveFormat" asp-items="Html.GetEnumSelectList<ArchiveFormat>()"></select>

Exécutez l’application et consultez la page d’index. Vous verrez quelque chose comme ça :

Traitement des demandes des utilisateurs

Ainsi, l’utilisateur spécifie le format d’archive souhaité et clique sur “Télécharger”. Comment gérer sa requête côté serveur ? En utilisant l’approche ASP.NET, nous devons composer une méthode OnPost appropriée pour la source Index.cshtml.cs. Voici le brouillon de la méthode :

 1 
 2
 3  public FileStreamResult OnPost ([FromForm] ArchiveFormat archiveFormat)
 4  {
 5    changer (archiveFormat)
 6    {
 7      cas ArchiveFormat.Zip :
 8        ...
 9        renvoie un nouveau FileStreamResult(result, "application/zip") {FileDownloadName = "barcode.zip"} ;
10      cas ArchiveFormat.Bzip2 :
11        ...
12        renvoie un nouveau FileStreamResult(result, "application/x-bzip2") {FileDownloadName = "barcode.bmp.bz2"} ;
13      cas ArchiveFormat.SevenZip :
14        ...
15        renvoie un nouveau FileStreamResult(result, "application/x-7z-compressed") {FileDownloadName = "barcode.7z"} ;                           
16    }
17  }

Ainsi, pour le type d’archive demandé, nous devons préparer l’archive correspondante à partir d’exemples de données (variable result) et répondre avec Microsoft.AspNetCore.Mvc.FileStreamResult ayant le type MIME approprié.

Génération d’exemples de données

Nous utilisons la bibliothèque Aspose.BarCode pour générer une image BMP du code-barres à l’aide de cette instruction. L’extrait de génération du flux de données :

 1  flux privé GenerateBarcode()
 2  {
 3    var générateur = new Aspose.BarCode.Generation.BarcodeGenerator(
 4        Aspose.BarCode.Generation.EncodeTypes.Pdf417, "Ceci est un texte de code de test. \n Deuxième ligne \n troisième ligne.");
 5              
 6    generator.Parameters.Barcode.XDimension.Millimeters = 0.6f;
 7    generator.Parameters.Barcode.BarHeight.Millimeters = 1.2f;
 8
 9    MemoryStream result = new MemoryStream();
10    generator.Save(result, Aspose.BarCode.Generation.BarCodeImageFormat.Bmp);
11    result.Seek(0, SeekOrigin.Begin);
12    return result;
13  }

Réponse finale

Nous avons maintenant un flux de données brutes provenant de la méthode GenerateBarcode. Compressez-le de manière appropriée dans tous les cas. Vous trouverez ci-dessous la méthode finale « OnPost ».

 1public FileStreamResult OnPost ([FromForm] ArchiveFormat archiveFormat)
 2  {
 3      en utilisant (var barcode = this.GenerateBarcode())
 4      {
 5          var résultat = nouveau MemoryStream();
 6          changer (archiveFormat)
 7          {
 8              cas ArchiveFormat.Zip :
 9                  en utilisant (Archiver a = new Archive())
10                  {
11                      a.CreateEntry("barcode.bmp", code-barres);
12                      a.Enregistrer (résultat) ;
13                  }
14                  
15                  result.Seek(0, SeekOrigin.Begin);
16                  return new FileStreamResult(result, "application/zip") {FileDownloadName = "barcode.zip"};
17              case ArchiveFormat.Bzip2:
18                  using (Bzip2Archive a = new Bzip2Archive())
19                  {
20                      a.SetSource(barcode);
21                      a.Save(result);
22                  }
23
24                  result.Seek(0, SeekOrigin.Begin);
25                  return new FileStreamResult(result, "application/x-bzip2") {FileDownloadName = "barcode.bmp.bz2"};
26              case ArchiveFormat.SevenZip:
27                  using (SevenZipArchive a = new SevenZipArchive())
28                  {
29                      a.CreateEntry("barcode.bmp", barcode);
30                      a.Save(result);
31                  }
32
33                  result.Seek(0, SeekOrigin.Begin);
34                  return new FileStreamResult(result, "application/x-7z-compressed") {FileDownloadName = "barcode.7z"};
35              default:
36                  throw new ArgumentOutOfRangeException(nameof(archiveFormat));
37          }
38      }
39  }

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.