ASP.NET 웹 애플리케이션에 아카이브 업로드

대본

이 문서에서는 ASP.NET 웹 애플리케이션의 아카이브 압축 해제 및 이미지 처리를 위해 Aspose 라이브러리를 사용하는 방법에 대한 예를 제공합니다. 사용자 사례: 사이트 방문자는 이미지가 포함된 zip 아카이브를 웹 애플리케이션에 업로드하여 특정 각도로 모두 회전합니다. 이에 대한 응답으로 회전된 이미지가 동일한 웹 페이지에 표시됩니다.

ASP.NET 웹 애플리케이션 준비

Visual Studio를 사용하여 Razor Pages와 함께 간단한 ASP.NET Core 웹 애플리케이션을 작성합니다. NuGet 패키지 관리자를 사용하면 프로젝트에 대한 두 가지 패키지, 즉 압축 해제용 Aspose.Zip과 이미지 처리용 Aspose.Imaging을 참조할 수 있습니다.
솔루션 탐색기에서 Index.cshtml 페이지를 찾으세요. 이제 <form> 태그 내에 enctype="multipart/form-data" 속성을 사용하여 해당 페이지에 양식을 추가하세요. 웹 서버로 파일을 전송해야 했습니다. 그런 다음 두 개의 입력 필드를 추가합니다. 하나는 업로드된 아카이브에 대한 ‘file’ 유형이고 다른 하나는 회전 각도를 지정하는 ’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로 변경합니다. 이 목록을 진행된 이미지 바이트로 채웁니다. 웹페이지에 표시하려면 데이터 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.