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 }