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

Сценарий

В этой статье представлен пример использования библиотек Aspose для распаковки архивов и обработки изображений для веб-приложения ASP.NET. Пользовательский пример: посетитель сайта загружает zip-архив с изображениями в веб-приложение, чтобы повернуть их под определенным углом. В ответ повернутые изображения будут отображаться на той же веб-странице.

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

Используя Visual Studio, создайте простое веб-приложение ASP.NET Core с помощью Razor Pages. Используя диспетчер пакетов NuGet, создайте два пакета для вашего проекта: Aspose.Zip для распаковки и Aspose.Imaging для обработки изображений.
Найдите страницу Index.cshtml в обозревателе решений. Теперь добавьте форму на эту страницу с атрибутом enctype=“multipart/form-data” в теге

. Необходимо было передать файл на веб-сервер. Затем добавьте два поля ввода — одно типа «файл» для загруженного архива, другое типа «номер» для указания угла поворота. Вот полная HTML-разметка формы:

1<form method="post" enctype="multipart/form-data">
2    <span>Images archive: </span><input type="file" name="uploadedFile" required="required" />
3    <br />
4    <span>Rotation angle: </span><input type="number" value="30" min="0" max="360" name="rotateDegree" required="required" />
5    <br />
6    <input type="submit" value="Upload" />
7</form>

Также были добавлены некоторые атрибуты проверки.

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

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

1public void OnPost (IFormFile uploadedFile, int RotateDegree) {
2    используя (Архивный архив = новый Архив (uploadedFile.OpenReadStream ())) {
3        foreach (запись ArchiveEntry в archive.Entries) {
4		   // Извлекаем изображение и поворачиваем его.
5		}
6    }
7}

Поворот изображений

Мы используем библиотеку Aspose.Imaging для поворота изображения на определенный угол по ходу полета, следуя этой инструкции. Фрагмент кода ротации:

 1    using (MemoryStream rotated = new MemoryStream())
 2    {
 3        using (RasterImage image = (RasterImage)Image.Load(extracted))
 4        {
 5            // Before rotation, the image should be cached for better performance
 6            if (!image.IsCached)
 7                image.CacheData();
 8                    
 9            image.Rotate(rotateDegree, true, Color.CornflowerBlue);
10            image.Save(rotated);
11        }                          
12    }

Модель страницы и рендеринг изображений

Нам нужно хранить байты обработанных изображений в модели страницы для их рендеринга. Добавить свойство public List<byte[]> ImageBytes {get; частный набор; } в IndexModel. Заполняем этот список обработанными байтами изображения. Чтобы показать их на веб-странице, мы используем URI данных. Нам нужно преобразовать байты изображения в строку base64. Вот код рендеринга Razor в Index.cshtml

1@{
2if (Model.ImageBytes != null && Model.ImageBytes.Count > 0) {
3        <h4>Повернутые изображения:</h4>
4        foreach (изображение byte[] в Model.ImageBytes) {
5            <img src="data:image;base64,@Convert.ToBase64String(image)" width="150"/>
6        }
7    }
8}

Завершение ответа

Итак, соберите все это вместе. Каждая запись архива была распакована, затем из этих байтов было составлено изображение и, наконец, повернуто.
В этом примере мы не проверяем файл пользователя. В реальных приложениях вам следует проверить загруженный архив и его содержимое.
Ниже приведен последний метод OnPost.

 1    public void OnPost(IFormFile uploadedFile, int rotateDegree)
 2    {
 3        ImageBytes = new List<byte[]>();
 4
 5        using (Archive archive = new Archive(uploadedFile.OpenReadStream()))
 6        {
 7            foreach (ArchiveEntry entry in archive.Entries)
 8            {
 9                if (entry.IsDirectory)
10                    continue;
11
12                using (MemoryStream extracted = new MemoryStream())
13                {
14                    entry.Open().CopyTo(extracted);
15                    extracted.Seek(0, SeekOrigin.Begin);
16                    using (MemoryStream rotated = new MemoryStream())
17                    {
18                        using (RasterImage image = (RasterImage)Image.Load(extracted))
19                        {
20                            if (!image.IsCached)  // Before rotation, the image should be cached for better performance
21                                image.CacheData();
22
23                            image.Rotate(rotateDegree, true, Color.CornflowerBlue);
24                            image.Save(rotated);
25                        }
26                        
27                        this.ImageBytes.Add(rotated.ToArray());
28                    }
29                }
30            }
31        }
32    }

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.