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 }