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>Imgenes 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.