Cargar archivo en la aplicación web ASP.NET

Guión

Este artículo le proporciona un ejemplo de cómo utilizar las bibliotecas Aspose para la descompresión de archivos y el procesamiento de imágenes para aplicaciones web ASP.NET. El caso del usuario: el visitante del sitio carga un archivo zip con imágenes en la aplicación web para rotarlos todos en un ángulo específico. Las imágenes rotadas se mostrarán en la misma página web como respuesta.

Preparar la aplicación web ASP.NET

Usando Visual Studio, cree una aplicación web ASP.NET Core simple con Razor Pages. Para utilizar el Administrador de paquetes NuGet, consulte dos paquetes para su proyecto: Aspose.Zip para descompresión y Aspose.Imaging para procesamiento de imágenes.
Busque la página Index.cshtml dentro de su Explorador de soluciones. Ahora, agregue un formulario a esa página con el atributo enctype="multipart/form-data" dentro de la etiqueta <form>. Necesitaba transferir el archivo al servidor web. Luego, agregue dos campos de entrada: uno de tipo “archivo” para el archivo cargado y otro de tipo “número” para especificar el ángulo de rotación. Aquí está el marcado HTML completo para el formulario:

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>

También se han agregado algunos atributos de validación.

Manejando la solicitud del usuario

Entonces, el usuario proporciona imágenes al archivo zip y envía el formulario. ¿Cómo manejar su solicitud en el lado del servidor? Usando el enfoque ASP.NET necesitamos componer un método OnPost apropiado para la fuente Index.cshtml.cs. Dentro de este método extraemos archivo zip usando el constructor apropiado, luego rotamos cada imagen. Aquí está el borrador del método:

1public void OnPost (IFormFile uploadedFile, int rotarDegree) {
2    usando (Archivo archivo = nuevo Archivo (uploadedFile.OpenReadStream())) {
3        foreach (entrada ArchiveEntry en archive.Entries) {
4		   // Extrae la imagen y gírala.
5		}
6    }
7}

Rotar imágenes

Usamos la biblioteca Aspose.Imaging para rotar una imagen en un ángulo particular en el ángulo de vuelo siguiendo esta instrucción. El fragmento de código de rotación:

 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    }

Modelo de página y representación de imágenes

Necesitamos almacenar bytes de imágenes procesadas dentro del modelo de página para representar esas imágenes. Agregue la propiedad Lista pública<byte[]> ImageBytes { get; conjunto privado; } a Modelo de índice. Llenamos esta lista con bytes de imagen procedidos. Para mostrarlos en la página web usamos URI de datos Necesitamos convertir bytes de imagen a una cadena base64. Aquí hay una representación del código Razor en Index.cshtml

1@{
2si (Model.ImageBytes! = nulo && Model.ImageBytes.Count > 0) {
3        <h4>Imágenes rotadas:</h4>
4        foreach (byte[] imagen en Model.ImageBytes) {
5            <img src="data:image;base64,@Convert.ToBase64String(imagen)" width="150"/>
6        }
7    }
8}

Respuesta final

Así que ponlo todo junto. Cada entrada del archivo ha sido descomprimida, luego una imagen compuesta a partir de estos bytes y finalmente rotada.
No validamos el archivo de usuario en esta muestra. En aplicaciones del mundo real, debes verificar un archivo cargado y su contenido.
A continuación se muestra el método OnPost final.

 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.