Microsoft Azure : Blob 컨테이너에서 하위 디렉터리를 만드는 방법


97

Blob 컨테이너에 하위 디렉터리를 만드는 방법

예를 들면

내 blob 컨테이너 http://veda.blob.core.windows.net/document/

일부 파일을 저장하면

http://veda.blob.core.windows.net/document/1.txt

http://veda.blob.core.windows.net/document/2.txt

이제 하위 디렉터리를 만드는 방법

http://veda.blob.core.windows.net/document/folder/

파일을 저장할 수 있도록

http://veda.blob.core.windows.net/document/folder/1.txt

답변:


137

Egon이 말한 내용을 추가하려면 "folder / 1.txt"라는 blob을 생성하면됩니다. 디렉토리를 만들 필요가 없습니다.


3
"폴더"에서 이러한 모든 파일을 필터링하거나 가져 오는 방법은 무엇입니까?
— afr0

2
이것은 나를 위해 작동하지 않는다고 컨테이너는 소문자, 하이픈, 숫자 이외의 것을 사용할 수 없다고 말합니다. 같은 파일 이름을
— Green_qaue

@Green_qaue 컨테이너 / 디렉터리 이름을 지정하는 데 소문자와 숫자 만 사용해야하므로 오류가 발생합니다.
— Sapan Ghafuri

1
동일한 폴더로 여러 개의 디렉토리를 생성합니다. 파일을 업로드 할 때마다 "folder"라는 디렉토리를 다시 생성합니다. 폴더가 존재하는지 확인하는 방법이 있나요?
— amal50

@SapanGhafuri 이것은 사실이 아닙니다. 대문자를 포함하는 디렉토리를 만들 수 있습니다
— codah

36

실제로 컨테이너의 단일 레이어 만 있습니다. 계층화 된 스토리지와 같은 "파일 시스템"을 가상으로 만들 수 있지만 실제로는 모든 것이 하나의 계층, 즉 그 안에있는 컨테이너에 있습니다.

저장소와 같은 가상 "파일 시스템"을 만들려면 '/'가 포함 된 Blob 이름을 사용하여 저장하는 방식으로 원하는 작업을 수행 할 수 있습니다. 또한 가장 좋은 점은 '/'까지 부분 문자열을 제공하여 가상 수준에서 blob을 검색 할 수 있다는 것입니다.

경로에 '/'를 추가하고 검색을위한 부분 문자열을 추가하는이 두 가지가 함께 가상 "파일 시스템"스토리지를 생성합니다.


C # 샘플을 공유 할 수 있습니까? blob.The 이름은 우리가 "/"와 blob.Name을 만들 수 없습니다 있도록 전용 속성을 읽기
— ABB

34

@ afr0이 폴더 필터링 방법을 묻는 댓글이 있습니다.

GetDirectoryReference컨테이너 Blob을 통해 또는 루프를 사용 하고 유형을 확인하는 두 가지 방법이 있습니다 . 아래 코드는 C #입니다.

CloudBlobContainer container = blobClient.GetContainerReference("photos");

//Method 1. grab a folder reference directly from the container
CloudBlobDirectory folder = container.GetDirectoryReference("directoryName");

//Method 2. Loop over container and grab folders.
foreach (IListBlobItem item in container.ListBlobs(null, false))
{
    if (item.GetType() == typeof(CloudBlobDirectory))
    {
        // we know this is a sub directory now
        CloudBlobDirectory subFolder = (CloudBlobDirectory)item;

        Console.WriteLine("Directory: {0}", subFolder.Uri);
    }
}

자세한 내용은 http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori 를 읽으십시오 .


1
오늘 날짜를 기준으로 한 답입니다. +1
— MickyD 2017

2
좋은 정보이지만 '블롭 컨테이너에 하위 디렉터리를 만드는 방법'에 대답합니까?
— codah

20

Azure Portal에는 파일을 업로드하는 동안 아래 옵션이 있습니다.

여기에 이미지 설명 입력



4

하위 디렉터리를 만들 필요가 없습니다. 그냥 변수와 같은 덩어리 용기와 사용 파일 이름을 만들 파일 이름 코드를 아래와 같이를 :

string filename = "document/tech/user-guide.pdf";
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlockBlob blob = cloudBlobContainer.GetBlockBlobReference(filename);
blob.StreamWriteSizeInBytes = 20 * 1024;
blob.UploadFromStream(fileStream); // fileStream is System.IO.Stream

2

@Egon이 위에서 언급했듯이 BLOB 저장소에는 실제 폴더 관리가 없습니다.

파일 이름에 '/'를 사용하여 파일 시스템의 일부 기능을 얻을 수 있지만 여기에는 많은 제한이 있습니다 (예 : "폴더"의 이름을 변경해야하는 경우 어떻게됩니까?).

일반적으로 컨테이너에서 파일 을 가능한 한 평평 하게 유지 하고 최종 사용자에게 노출하려는 모든 구조를 애플리케이션에서 관리하도록합니다 (예 : 내 데이터베이스에서 중첩 된 폴더 구조를 관리하고 각각에 대한 레코드가 있음). 파일, 컨테이너 이름 및 파일 이름을 사용하여 BLOB 참조).


1

Azure Sample first-serverless-app 을 시도하는 동안 비슷한 문제가 발생했습니다 .
다음은 $ web 앞의 \를 제거하여 해결 방법에 대한 정보입니다.

참고 : $ web 컨테이너는 정적 웹 사이트를 활성화하는 동안 자동으로 생성되었습니다. $ root 컨테이너는 어디에서도 본 적이 없습니다.

//getting Invalid URI error while following tutorial as-is
az storage blob upload-batch -s . -d \$web --account-name firststgaccount01

//Remove "\" @destination param
az storage blob upload-batch -s . -d $web --account-name firststgaccount01

-2

Node.JS의 CoffeeScript에서 수행하는 방법은 다음과 같습니다.

blobService.createBlockBlobFromText 'containerName', (path + '$$$.$$$'), '', (err, result)->
    if err
        console.log 'failed to create path', err
    else
        console.log 'created path', path, result

4
문제는 다음과 같이 태그가C#
— 라파엘 Herscovici

@Dementic 따라서 CoffeeScript에 대한 언급은 딱딱하지 않은 JavaScript입니다. C #으로 이식하기가 너무 어렵지 않아야합니다. 특히 프로그래밍 언어가 아닌 수용된 답변과 비교하면 더욱 그렇습니다.
— Cees Timmerman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.