Laden Sie das Archiv in die ASP.NET-Webanwendung hoch

Szenario

In diesem Artikel finden Sie ein Beispiel für die Verwendung von Aspose-Bibliotheken zur Archivdekomprimierung und Bildverarbeitung für ASP.NET-Webanwendungen. Der Anwendungsfall: Website-Besucher lädt ZIP-Archiv mit Bildern in eine Webanwendung hoch, um sie alle um einen bestimmten Winkel zu drehen. Als Reaktion darauf werden gedrehte Bilder auf derselben Webseite angezeigt.

ASP.NET-Webanwendung vorbereiten

Erstellen Sie mit Visual Studio eine einfache ASP.NET Core-Webanwendung mit Razor Pages. Mit dem NuGet-Paketmanager verweisen Sie auf zwei Pakete für Ihr Projekt: Aspose.Zip für die Dekomprimierung und Aspose.Imaging für die Bildverarbeitung.
Suchen Sie in Ihrem Projektmappen-Explorer nach der Seite „Index.cshtml“. Fügen Sie dieser Seite nun ein Formular mit dem Attribut „enctype=“multipart/form-data”“ innerhalb des Tags „

“ hinzu. Es musste eine Datei auf den Webserver übertragen werden. Fügen Sie dann zwei Eingabefelder hinzu – eines vom Typ „Datei“ für das hochgeladene Archiv, ein weiteres vom Typ „Nummer“ zur Angabe des Drehwinkels. Hier ist das vollständige HTML-Markup für das Formular:

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>

Einige Validierungsattribute wurden ebenfalls hinzugefügt.

Bearbeitung von Benutzeranfragen

Der Benutzer stellt also das Zip-Archiv mit Bildern bereit und sendet das Formular ab. Wie gehe ich mit seiner Anfrage auf der Serverseite um? Mithilfe des ASP.NET-Ansatzes müssen wir eine geeignete „OnPost“-Methode für die Quelle „Index.cshtml.cs“ erstellen. Bei dieser Methode extrahieren wir zip-Archiv mit dem entsprechenden Konstruktor und drehen dann jedes Bild. Hier ist der Entwurf der Methode:

1public void OnPost(IFormFile uploadedFile, int rotateDegree) {
2    using (Archive archive = new Archive(uploadedFile.OpenReadStream())) {
3        foreach (ArchiveEntry-Eintrag in archive.Entries) {
4		   // Bild extrahieren und drehen.
5		}
6    }
7}

Bilder drehen

Wir verwenden die Aspose.Imaging-Bibliothek, um ein Bild um einen bestimmten Winkel im Flugwinkel zu drehen, indem wir dieser Anweisung folgen. Der Ausschnitt aus dem Rotationscode:

 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    }

Seitenmodell und Bildwiedergabe

Wir müssen Bytes der verarbeiteten Bilder im Seitenmodell speichern, um diese Bilder zu rendern. Fügen Sie die Eigenschaft „public List<byte[]> ImageBytes { get;“ hinzu. privates Set; }zuIndexModel`. Wir füllen diese Liste mit verarbeiteten Bildbytes. Um sie auf der Webseite anzuzeigen, verwenden wir Daten-URI. Wir müssen Bildbytes in Base64-Strings konvertieren. Hier ist ein Rendering-Razor-Code unter „Index.cshtml“.

1@{
2if (Model.ImageBytes != null && Model.ImageBytes.Count > 0) {
3        <h4>Gedrehte Bilder:</h4>
4        foreach (byte[] Bild in Model.ImageBytes) {
5            <img src="data:image;base64,@Convert.ToBase64String(image)" width="150"/>
6        }
7    }
8}

Abschließende Antwort

Also, fügen Sie alles zusammen. Jeder Eintrag des Archivs wurde dekomprimiert, dann wurde aus diesen Bytes ein Bild zusammengestellt und schließlich gedreht.
Wir validieren die Benutzerdatei in diesem Beispiel nicht. In realen Anwendungen sollten Sie ein hochgeladenes Archiv und seinen Inhalt überprüfen.
Unten finden Sie die endgültige „OnPost“-Methode.

 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.