アーカイブを ASP.NET Web アプリケーションにアップロードする

シナリオ

この記事では、ASP.NET Web アプリケーションのアーカイブ解凍と画像処理に Aspose ライブラリを使用する方法の例を示します。ユーザーケース: サイト訪問者が画像を含む zip アーカイブを Web アプリケーションにアップロードし、すべての画像を特定の角度で回転させます。 これに応じて、回転された画像が同じ Web ページに表示されます。

ASP.NET Web アプリケーションの準備

Visual Studio を使用して、Razor Pages で単純な ASP.NET Core Web アプリケーションを作成します。 NuGet パッケージ マネージャーを使用して、プロジェクトの 2 つのパッケージを参照します。解凍用の Aspose.Zip と画像処理用の Aspose.Imaging です。
ソリューション エクスプローラー内でページ「Index.cshtml」を見つけます。ここで、<form> タグ内の enctype="multipart/form-data" 属性を使用して、そのページにフォームを追加します。ファイルをWebサーバーに転送する必要がありました。次に、2 つの入力フィールドを追加します。1 つはアップロードされたアーカイブ用の file タイプで、もう 1 つは回転角度を指定するための number タイプです。 フォームの完全な 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 アプローチを使用して、「Index.cshtml.cs」ソースに適切な「OnPost」メソッドを作成する必要があります。このメソッド内では、 適切なコンストラクター を使用して zip アーカイブ を抽出し、各画像を回転します。メソッドの草案は次のとおりです。

1public void OnPost(IFormFile uploadedFile, int rotateDegree) {
2    using (Archive archive = new Archive(uploadedFile.OpenReadStream())) {
3        foreach (ArchiveEntry entry in archive.Entries) {
4		   // Extract image and rotate it.
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 に変換します。 このリストに処理済みの画像バイトを入力します。 Web ページに表示するには、 データ URI を使用します。画像バイトを Base64 文字列に変換する必要があります。 これは、Index.cshtml にある Razor コードのレンダリングです。

1@{
2if (Model.ImageBytes != null && Model.ImageBytes.Count > 0) {
3        <h4>Rotated images:</h4>
4        foreach (byte[] image in 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.