Загрузите архив из веб-приложения 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 }