Laden Sie das Archiv von der ASP.NET-Webanwendung herunter

Archiv vom Server herunterladen

Es ist eine gängige Funktion von Webanwendungen, eine Datei von Ihrem Webserver herunterzuladen. Um die Größe der über Kabel übertragenen Daten zu reduzieren, können Sie die Datei komprimieren. Für den Benutzer ist es praktisch, das Format des herunterzuladenden Archivs auszuwählen. Dieses Beispiel gibt Ihnen einige Einblicke in die Verwaltung.

ASP.NET-Webanwendung vorbereiten

Erstellen Sie mit Visual Studio eine ASP.NET Core-Webanwendung. Lassen Sie es eine einfache Webanwendung mit Razor Pages sein. Mit dem NuGet Package Manager fügen Sie zwei Pakete für Ihr Projekt hinzu: Aspose.Zip zur Komprimierung und Aspose.BarCode zur Generierung von Beispieldaten.
Suchen Sie in Ihrem Projektmappen-Explorer nach der Seite „Index.cshtml“. Fügen Sie dieser Seite nun ein Formular mit einer Senden-Schaltfläche hinzu. Es musste eine Download-Anfrage durch den Benutzer initiiert werden.
Fügen Sie dieser Seite das folgende HTML-Markup hinzu:

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

Archivformate auflisten

Für dieses Beispiel haben wir drei der Archivformate ausgewählt, die Aspose.ZIP unterstützt: ZIP, Bzip2, 7z. Erstellen Sie eine Aufzählung für diese Formate und markieren Sie ihre Mitglieder mit DisplayAttribute.
Der Aufzählungscode lautet:

 1  öffentliche Enumeration ArchiveFormat
 2  {
 3      [Anzeige(Name = „ZIP“)]
 4      Reißverschluss,
 5
 6      [Display(Name = "Bzip2")]
 7      Bz2,
 8
 9      [Display(Name = "7z")]
10      SevenZip
11  }

Als nächstes müssen Sie eine Dropdown-Liste innerhalb des Webformulars erstellen. Mit dem HTML-Helfer GetEnumSelectList ist das ganz einfach – es ist nicht nötig, Elemente mit einer Schleife zu generieren. Fügen Sie einfach den folgenden Ausschnitt in Ihr Formular in „Index.cshtml“ ein:

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

Führen Sie die Anwendung aus und sehen Sie sich die Indexseite an. Sie werden so etwas sehen:

Bearbeitung von Benutzeranfragen

Der Benutzer gibt also das gewünschte Archivformat an und klickt auf „Herunterladen“. Wie gehe ich mit seiner Anfrage auf der Serverseite um? Mithilfe des ASP.NET-Ansatzes müssen wir eine geeignete „OnPost“-Methode für die Quelle „Index.cshtml.cs“ erstellen. Hier ist der Entwurf der Methode:

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

Für den angeforderten Archivtyp müssen wir also das entsprechende Archiv aus Beispieldaten (Variable „result“) vorbereiten und mit „Microsoft.AspNetCore.Mvc.FileStreamResult“ mit dem richtigen MIME-Typ antworten.

Beispieldaten generieren

Wir verwenden die Aspose.BarCode-Bibliothek, um mit dieser Anweisung ein BMP-Bild des Barcodes zu generieren. Der Ausschnitt der Datenstromgenerierung:

 1  privater Stream GenerateBarcode()
 2  {
 3    var generator = new Aspose.BarCode.Generation.BarcodeGenerator(
 4        Aspose.BarCode.Generation.EncodeTypes.Pdf417, Dies ist ein Testcodetext. \n Zweite Zeile \n dritte Zeile.);
 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  }

Abschließende Antwort

Jetzt haben wir einen Rohdatenstrom von der Methode „GenerateBarcode“. Komprimieren Sie es in jedem Fall entsprechend. Unten ist die endgültige „OnPost“-Methode.

 1public FileStreamResult OnPost([FromForm] ArchiveFormat archiveFormat)
 2  {
 3      mit (var barcode = this.GenerateBarcode())
 4      {
 5          var result = new MemoryStream();
 6          switch (archiveFormat)
 7          {
 8              Fall ArchiveFormat.Zip:
 9                  using (Archive a = new Archive())
10                  {
11                      a.CreateEntry("barcode.bmp", barcode);
12                      a.Speichern(Ergebnis);
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.