Загрузите архив из веб-приложения ASP.NET.

Скачать архив с сервера

Веб-приложения обычно загружают файл с вашего веб-сервера. Чтобы уменьшить размер данных, передаваемых по проводу, вы можете сжать файл. Пользователю удобно выбирать формат скачиваемого архива. Этот пример дает вам некоторое представление о том, как им управлять.

Подготовка веб-приложения ASP.NET

Используя Visual Studio, создайте базовое веб-приложение ASP.NET. Пусть это будет простое веб-приложение с Razor Pages. Используя диспетчер пакетов NuGet, вы включаете в свой проект два пакета: Aspose.Zip для сжатия и Aspose.BarCode для создания образцов данных.
Найдите страницу Index.cshtml в обозревателе решений. Теперь добавьте на эту страницу форму с кнопкой отправки внутри нее. Пользователь должен был инициировать запрос на загрузку.
Добавьте на эту страницу следующую HTML-разметку:

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

Перечислить форматы архивов

Для этого примера мы выбрали три формата архивов, которые поддерживает Aspose.ZIP: ZIP, Bzip2, 7z. Составьте перечисление для тех форматов, которые помечают его элементы с помощью DisplayAttribute.
Код перечисления будет следующим:

 1  общедоступное перечисление ArchiveFormat
 2  {
 3      [Показать(Имя="ZIP")]
 4      Зип,
 5
 6      [Display(Name = "Bzip2")]
 7      Bz2,
 8
 9      [Display(Name = "7z")]
10      SevenZip
11  }

Далее вам нужно создать раскрывающийся список в веб-форме. С помощью Html-помощника GetEnumSelectList это довольно просто — нет необходимости генерировать элементы с помощью цикла. Просто поместите в форму index.cshtml следующий фрагмент:

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

Запустите приложение и просмотрите индексную страницу. Вы увидите что-то вроде этого:

Обработка запроса пользователя

Итак, пользователь указывает желаемый формат архива и нажимает «Загрузить». Как обработать его запрос на стороне сервера? Используя подход ASP.NET, нам нужно создать соответствующий метод OnPost для источника Index.cshtml.cs. Вот проект метода:

 1 
 2
 3  public FileStreamResult OnPost ([FromForm] ArchiveFormat archiveFormat)
 4  {
 5    переключатель (формат архива)
 6    {
 7      кейс ArchiveFormat.Zip:
 8        ...
 9        вернуть новый FileStreamResult (результат, «приложение/zip») {FileDownloadName = «barcode.zip»};
10      дело ArchiveFormat.Bzip2:
11        ...
12        вернуть новый FileStreamResult (результат, «application/x-bzip2») {FileDownloadName = «barcode.bmp.bz2»};
13      дело ArchiveFormat.SevenZip:
14        ...
15        вернуть новый FileStreamResult (результат, «приложение/x-7z-сжатый») {FileDownloadName = «barcode.7z»};                           
16    }
17  }

Таким образом, для запрошенного типа архива мы должны подготовить соответствующий архив из образца данных (переменная result) и ответить с помощью Microsoft.AspNetCore.Mvc.FileStreamResult, имеющего правильный тип MIME.

Создание выборочных данных

Мы используем библиотеку Aspose.BarCode для создания BMP-изображения штрих-кода с помощью этой инструкции. Фрагмент генерации потока данных:

 1  частный поток GenerateBarcode()
 2  {
 3    генератор вар = новый Aspose.BarCode.Generation.BarcodeGenerator(
 4        Aspose.BarCode.Generation.EncodeTypes.Pdf417, "Это текст тестового кода. \n Вторая строка \n третья строка.");
 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.

 1public FileStreamResult OnPost ([FromForm] ArchiveFormat archiveFormat)
 2  {
 3      используя (var barcode = this.GenerateBarcode())
 4      {
 5          результат вар = новый MemoryStream();
 6          переключатель (формат архива)
 7          {
 8              кейс ArchiveFormat.Zip:
 9                  используя (Архив a = новый архив())
10                  {
11                      a.CreateEntry("barcode.bmp", штрих-код);
12                      а.Сохранить (результат);
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.