본문 바로가기

DevelopNote/기타

[.Net / Azure] azure blob storage에 파일 업로드 하기

Azure Blob Storage ?

  • Azure의 저장소로 사용되는 서비스
  • 대용량의 정형화되지 않은 데이터를 저장하기에 최적화된 저장소

MS에서 소개하는 Blob Storage 정보는 아래와 같다.

  • 브라우저에 이미지 또는 문서 직접 제공
  • 분산 액세스용 파일 저장.
  • 비디오 및 오디오 스트리밍.
  • 로그 파일에 쓰기
  • 백업/복원, 재해 복구 및 보관용 데이터 저장
  • 온-프레미스 또는 Azure 호스팅 서비스에서 분석하기 위한 데이터 저장.

<참고> https://docs.microsoft.com/ko-kr/azure/storage/blobs/storage-blobs-introduction

 

Azure 제공하는 Storage 서비스는 Blob Storage 이외에도 다양하게 있는데, Blob storage 서비스를 사용에 파일을 관리하기로 했다.

 

1. blob 컨테이너 생성하기

  • blob은 파일 디렉토리 구조로 구성되어있다.
  • storage 계정 > 컨테이너 생성 > 생성한 컨테이너에 이미지 및 파일들이 업로드된다.

 

  • 스토리지 계정에서 이미지 및 파일을 업로드할 새로운 컨테이너를 생성한다.
  • 업로드된 파일 url 경로에 접근 가능하도록 구성할 예정이므로, 공용 액세스 수준을 풀어주었다.

 

2. blob 컨테이너 접근하기

  • 생성한 blob 컨테이너에 접근하기 위해서 컨테이너를 만들었던 스토리지의 액세스 키가 필요하다.
  • 키 및 연결 문자열 표시를 눌러 연결 문자열을 복사해두자. 복사된 문자열은 컨테이너 접근에 사용된다.

 

3. [.Net] blob 스토리지에 파일 업로드 하기

(1) Nuget 으로 Azure blob 라이브러리 다운로드

Install-Package Microsoft.Azure.Storage.Blob

  • 설치가 완료되면 정상적으로 라이브러리 참조를 확인한다.

 

 

(2)  Azure Blob 접근

Azure Blob에 접근하기 위해, 생성한 컨테이너 이름과, 액세스 키를 설정 정보에 세팅해 사용할 수 있도록 한다.

  • AzureContainerName : 생성한 컨테이너 이름
  • AzureSecretKey : 복사한 액세스 키 문자열

 

(3) Test

 

UploadController 추가

 

 

using AzureBlob.Infra;
using System.Web;
using System.Web.Mvc;

namespace AzureBlob.Controllers
{
    public class UploadController : Controller
    {

        [HttpPost]
        public void UploadFile(HttpPostedFileBase UploadFile)
        {
            AzureFileClient azureFileUpload = new AzureFileClient();
            azureFileUpload.Upload(UploadFile);
       
        }
    }
}

 

 

AzureFileClient 추가 - 파일 업로드

using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using System.Configuration;
using System.IO;
using System.Web;

namespace AzureBlob.Infra
{
    public class AzureFileClient
    {

        public void Upload(HttpPostedFileBase UploadFile)
        {
            var fileName = Path.GetRandomFileName(); // 파일 이름 Random으로 변경

            UploadAzureClient(fileName, UploadFile);
        }

        private string  UploadAzureClient(string fileName, HttpPostedFileBase UploadFile)
        {
            var blob = GetAzureContainer(fileName);
            blob.Properties.ContentType = UploadFile.ContentType;
            using (var fileStream = UploadFile.InputStream)
            {
                blob.UploadFromStream(fileStream);
            }
            return blob.Uri.AbsoluteUri;
        }

        private CloudBlockBlob GetAzureContainer(string fileName)
        {
            // 1.get access key
            var accessKey = ConfigurationManager.AppSettings["AzureSecretKey"];

            //2. get Container  
            var blobContainer = ConfigurationManager.AppSettings["AzureContainerName"];

            //3. AzureCloud에서 Storage Service acessKey 접근
            var AzureAccountInfo = CloudStorageAccount.Parse(accessKey);

            //4. container 접근
            var container = AzureAccountInfo.CreateCloudBlobClient().GetContainerReference(blobContainer);

            return container.GetBlockBlobReference(fileName);

        }
    }
}

 

 

postman 테스트

 

 

[ 결과  ]  blob 스토리지에 정상적으로 업로드

  • Container를 private이 아닌 접근 가능하게 해 blob Uri로 업로드한 이미지 파일에 접근 가능하다.

 

300x250