ASP.NET Web アプリケーションからアーカイブをダウンロードする

サーバーからアーカイブをダウンロード

Web サーバーからファイルをダウンロードするのは、Web アプリケーションの一般的な機能です。ネットワーク経由で転送されるデータ サイズを減らすには、ファイルを圧縮する必要がある場合があります。ユーザーがダウンロードするアーカイブの形式を選択できると便利です。このサンプルは、それを管理する方法についての洞察を提供します。

ASP.NET Web アプリケーションの準備

Visual Studio を使用して、ASP.NET Core Web アプリケーションを作成します。これを Razor Pages を使用した単純な Web アプリケーションにしてみましょう。 NuGet パッケージ マネージャーを使用して、プロジェクトに 2 つのパッケージを含めます。圧縮用の Aspose.Zip とサンプル データ生成用の Aspose.BarCode です。
ソリューション エクスプローラー内で「Index.cshtml」ページを見つけます。次に、送信ボタンを含むフォームをそのページに追加します。ユーザーがダウンロード要求を開始する必要がありました。
次の HTML マークアップをそのページに追加します。

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

アーカイブ形式のリスト

このサンプルでは、​​ アーカイブ形式 Aspose.ZIP がサポートする 3 つを選択しました: ZIP、Bzip2、7z。 DisplayAttribute でメンバーをマークする形式の列挙を作成します。
列挙コードは次のようになります。

 1public enum ArchiveFormat
 2  {
 3      [Display(Name = "ZIP")]
 4      Zip,
 5
 6      [Display(Name = "Bzip2")]
 7      Bz2,
 8
 9      [Display(Name = "7z")]
10      SevenZip
11  }

次に、Web フォーム内にドロップダウン リストを作成する必要があります。 GetEnumSelectList HTML ヘルパーを使用すると非常に簡単です。ループで項目を生成する必要はありません。 フォーム内の「Index.cshtml」に次のスニペットを追加するだけです。

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

アプリケーションを実行し、インデックス ページを確認します。次のようなものが表示されます。

ユーザーリクエストの処理

したがって、ユーザーは希望のアーカイブ形式を指定して「ダウンロード」をクリックします。サーバー側で彼のリクエストを処理するにはどうすればよいでしょうか? ASP.NET アプローチを使用して、「Index.cshtml.cs」ソースに適切な「OnPost」メソッドを作成する必要があります。メソッドの草案は次のとおりです。

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

したがって、要求されたアーカイブ タイプに対して、サンプル データ (result 変数) から対応するアーカイブを準備し、適切な MIME タイプを持つ Microsoft.AspNetCore.Mvc.FileStreamResult で応答する必要があります。

サンプルデータの生成

Aspose.BarCode ライブラリを使用して、 この命令 を使用してバーコードの BMP 画像を生成します。 データ ストリーム生成のスニペット:

 1  private Stream GenerateBarcode()
 2  {
 3    var generator = new Aspose.BarCode.Generation.BarcodeGenerator(
 4        Aspose.BarCode.Generation.EncodeTypes.Pdf417, "This is a test code text. \n Second line \n third line.");
 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  }

応答を終了します

これで、「GenerateBarcode」メソッドからの生のデータ ストリームが得られました。いずれの場合も適切に圧縮してください。以下は最後の OnPost メソッドです。

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