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.