T�l�charger l'archive sur l'application Web ASP.NET
Sc�nario
Cet article vous fournit un exemple d’utilisation des biblioth�ques Aspose pour la d�compression d’archives et le traitement d’images pour l’application Web ASP.NET. Le cas d’utilisation�: le visiteur du site t�l�charge une archive zip contenant des images sur une application Web pour les faire pivoter selon un angle sp�cifique. Les images pivot�es seront affich�es sur la m�me page Web en r�ponse.
Pr�parer l’application Web ASP.NET
� l�aide de Visual Studio, composez une application Web ASP.NET Core simple avec Razor Pages.
� l’aide de NuGet Package Manager, r�f�rez-vous � deux packages pour votre projet�:
Aspose.Zip pour la d�compression et
Aspose.Imaging pour le traitement d’image.
Recherchez la page � Index.cshtml � dans votre Explorateur de solutions. Maintenant, ajoutez un formulaire � cette page avec l’attribut enctype="multipart/form-data" dans la balise <form>. Il fallait transf�rer le fichier vers le serveur Web. Ensuite, ajoutez deux champs de saisie - un de type � fichier � pour l’archive t�l�charg�e, un autre de type � num�ro � pour sp�cifier l’angle de rotation.
Voici le balisage HTML complet du formulaire�:
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>Certains attributs de validation ont �galement �t� ajout�s.
Traitement des demandes des utilisateurs
Ainsi, l’utilisateur fournit des images � l’archive zip et soumet le formulaire. Comment g�rer sa requ�te c�t� serveur ? En utilisant l’approche ASP.NET, nous devons composer une m�thode OnPost appropri�e pour la source Index.cshtml.cs. Dans cette m�thode, nous extrayons
l’archive zip en utilisant
le constructeur appropri�, puis faisons pivoter chaque image. Voici le brouillon de la m�thode :
1public void OnPost (IFormFile uploadedFile, int rotateDegree) {
2 using (Archive archive = new Archive(uploadedFile.OpenReadStream())) {
3 foreach (entr�e ArchiveEntry dans archive.Entries) {
4 // Extrait l'image et la fait pivoter.
5 }
6 }
7}Faire pivoter les images
Nous utilisons la biblioth�que Aspose.Imaging pour faire pivoter une image selon un angle particulier sur l’angle de vol en suivant cette instruction. L’extrait du code de rotation�:
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 }Mod�le de page et rendu d’image
Nous devons stocker des octets d’images trait�es dans le mod�le de page pour restituer ces images. Ajoutez la propri�t� public List<byte[]> ImageBytes { get; ensemble priv�; } � IndexModel.
Nous remplissons cette liste avec les octets d’image trait�s. Pour les afficher sur la page Web, nous utilisons
data URI Nous devons convertir les octets de l’image en cha�ne base64.
Voici un code Razor de rendu sur Index.cshtml
1@{
2if (Model.ImageBytes != null && Model.ImageBytes.Count > 0) {
3 <h4>Images pivot�es�:</h4>
4 foreach (image octet[] dans Model.ImageBytes) {
5 <img src="data:image;base64,@Convert.ToBase64String(image)" width="150"/>
6 }
7 }
8}R�ponse finale
Alors, mettez tout cela ensemble. Chaque entr�e de l’archive a �t� d�compress�e, puis une image compos�e � partir de ces octets, et enfin pivot�e.
Nous ne validons pas le fichier utilisateur dans cet exemple. Dans les applications r�elles, vous devez v�rifier une archive t�l�charg�e et son contenu.
Vous trouverez ci-dessous la m�thode finale 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 }