アーカイブを 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 }