본문 바로가기

Cloud/Azure

[Azure] Blob Storage - 컨테이너/폴더/메타데이터 생성방법(Web/.NET)

728x90
반응형

 

Azure에서는 파일을 저장하는 Blob Storage 가 있으며 컨테이너를 생성하여 대분류폴더(?!) 처럼 사용할 수 있다.

(여기에서의 컨테이너는 도커/쿠버네티스의 컨테이너는 아니다!!)

컨테이너 생성방법(Web UI)

컨테이너 버튼을 클릭하여 생성하면 아주 간단히 생성할 수 있지만 제약조건이 존재한다.

제약조건

  • 컨테이너명 입력시 한글 및 영문대문자는 입력 불가능
  • 영문소문자,숫자,하이픈(-)만 입력가능하며 문자나 숫자로 시작
  • 글자수는 3~63자리만 허용
  • 컨테이너 하위에 컨테이너를 추가할 수 없음.

컨테이너 추가
[Azure] 컨테이너명 제약조건

[Azure] 경고문구
이 이름은 소문자, 숫자 및 하이픈만 포함할 수 있으며 문자나 숫자로 시작해야 합니다. 각 하이픈 앞뒤에는 하이픈이 아닌 문자가 있어야 합니다. 또한 이름은 3~63자여야 합니다

컨테이너 생성방법(.NET)

// Azure BlobStorage - 컨테이너 생성
string connectionString = "Azure연결문자열"
string containerName = "board";

// 한글/영문대문자 생성 불가능
BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
container.CreateIfNotExists();

제약조건에 위배되면 예외가 발생된다.

[Azure] Azure.RequestFailedException - InvalidUri

Azure.RequestFailedException: 'The requested URI does not represent any resource on the server.
RequestId:27438-d01e-51-304f-8b3a90000
Time:2022-06-29T00:33:52.7555419Z
Status: 400 (The requested URI does not represent any resource on the server.)
ErrorCode: InvalidUri

Headers:
Server: Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0
x-ms-request-id: 2e7b8-d01e-0051-304f-8b3a980000
Date: Wed, 29 Jun 2022 00:33:52 GMT
Content-Length: 244
Content-Type: application/xml

폴더 생성방법(Web UI)

바로 폴더를 생성할 방법은 없고 파일업로드시 "폴더에 업로드" 항목에 폴더명을 입력해 주면 폴더가 생성되면서 파일이 업로드된다.(폴더를 바로 추가하는 UI가 있으면 좋을 듯 하다.)

컨테이너와 달리 폴더는 한글도 입력가능하고 하위폴더도 생성이 가능하다.

폴더명에 슬래시(/)를 입력하면 하위폴더들을 쉽게 한번에 만들 수 있다.

유의사항으로는 폴더내에 파일이 삭제되어 파일이 한개도 없게 될 경우에는 폴더자체가 삭제되어 확인할 수 없게 된다.

[Azure] 폴더 생성방법
[Azure] 생성된 폴더확인

폴더 생성방법(.NET)

// Azure BlobStorage
string connectionString = "Azure연결문자열"
string containerName = "board";

// Azure에 저장할 폴더/파일명
string azureFilePath = "/생성할 폴더명/두번째 폴더명/파일명.확장자";
BlobClient blobClient = container.GetBlobClient(azureFilePath);

// 실제 저장되어 있는 파일경로
Stream streamFile = new FileStream("C:\Users\AppData\Local\Temp\tmp1C78.tmp", FileMode.Open);

// 파일 메타정보 지정
IDictionary<string, string> metadata = new Dictionary<string, string>();
metadata.Add("TimeStamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

blobClient.Upload(streamFile, true);
blobClient.SetHttpHeaders(new BlobHttpHeaders() { ContentType = contentType });
blobClient.SetMetadata(metadata);

메타정보 지정시 유의사항

실제파일명을 FileName으로 지정하려 했으나 아직은 한글명을 지정할 수 없는 것을 확인(System.AggregateException 예외발생)

System.AggregateException: 'Retry failed after 6 tries.7.0,(.NET Core 3.1.25; Microsoft Windows 10.0.22000)e) (Request headers must contain only ASCII characters.) (Request headers must contain only ASCII characters.) (Request headers must contain only ASCII characters.) (Request headers must contain only ASCII characters.) (Request headers must contain only ASCII characters.)'

기타

웹에서 파일업로드 기능

파일을 WEB에서 직접업로드 가능_1
파일을 WEB에서 직접업로드 가능_2

 

컨테이너명, 파일명, 메타데이터명 네이밍 규칙은 Azure 공식사이트에서 확인할 수 있다.

https://docs.microsoft.com/ko-kr/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata

 

컨테이너, Blob 및 메타 데이터 이름 지정 및 참조-Azure Storage

이 항목에서는 컨테이너, Blob, 메타데이터 및 스냅숏의 명명 및 참조에 대해 설명합니다. 저장소 계정은 0개 이상의 컨테이너를 포함할 수 있습니다. 컨테이너에는 속성, 메타데이터 및 0개 이상

docs.microsoft.com

 

728x90
반응형