Завантажте архів із веб-додатку ASP.NET

Завантажити архів з сервера

Завантаження файлу з вашого веб-сервера є звичайною функцією веб-програм. Щоб зменшити розмір даних, що передаються по дроту, ви можете стиснути файл. Користувачеві зручно вибрати формат архіву для завантаження. Цей приклад дає вам деякі відомості про те, як ним керувати.

Підготуйте веб-додаток ASP.NET

Використовуючи Visual Studio, створіть ASP.NET Core Web Application. Нехай це буде проста веб-програма зі сторінками Razor. За допомогою диспетчера пакетів NuGet ви включаєте два пакети для свого проекту: Aspose.Zip для стиснення та Aspose.BarCode для генерації зразків даних.
Знайдіть сторінку Index.cshtml у своєму Solution Explorer. Тепер додайте форму до цієї сторінки з кнопкою надсилання на ній. Потрібно було ініціювати запит на завантаження користувачем.
Додайте до цієї сторінки таку розмітку HTML:

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

Список форматів архівів

Для цього зразка ми вибрали три формати архівів, які підтримує Aspose.ZIP: ZIP, Bzip2, 7z. Створіть перелік для цих форматів, позначивши його члени DisplayAttribute
Код переліку буде таким:

 1  публічний перелік ArchiveFormat
 2  {
 3      [Display(Name = "ZIP")]
 4      Zip,
 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    перемикач (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) і відповісти Microsoft.AspNetCore.Mvc.FileStreamResult, що має правильний тип MIME.

Створення вибіркових даних

Ми використовуємо бібліотеку Aspose.BarCode для створення BMP-зображення штрих-коду за допомогою цієї інструкції. Фрагмент генерації потоку даних:

 1  приватний потік GenerateBarcode()
 2  {
 3    var generator = new 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          var result = new MemoryStream();
 6          перемикач (archiveFormat)
 7          {
 8              case ArchiveFormat.Zip:
 9                  використовуючи (Архів a = новий Архів())
10                  {
11                      a.CreateEntry("barcode.bmp", штрих-код);
12                      a.Save(результат);
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.