Microsoft Azure:BLOBコンテナーにサブディレクトリを作成する方法


93

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

回答:


134

Egonの発言に追加するには、「folder / 1.txt」というblobを作成するだけで機能します。ディレクトリを作成する必要はありません。


3
「フォルダ」からこれらのすべてのファイルをどのようにフィルタリングまたは取得しますか?
afr0

1
これは私にはうまくいきません、コンテナは小文字、ハイフン、数字以外は何も使用できないと言います。ファイル名も同じ
Green_qaue 2017

@Green_qaueコンテナ/ディレクトリの命名には小文字と数字のみを使用する必要があるため、エラーが発生します。
Sapan Ghafuri 2017年

1
同じフォルダで複数のディレクトリを作成します。つまり、ファイルをアップロードするたびに、「フォルダ」という名前のディレクトリが再度作成されます。フォルダが存在するかどうかを確認する方法はありますか?
amal50 2018年

@SapanGhafuriこれは真実ではありません。大文字を含むディレクトリを作成できます
codah

36

実際には、コンテナのレイヤーは1つだけです。階層化ストレージのような「ファイルシステム」を仮想的に作成することができますが、実際にはすべてが1つのレイヤーにあります。

ストレージのような仮想「ファイルシステム」を作成するには、「/」を含むblob名を使用して、保存方法を好きなようにすることができます。また、優れた点は、 '/'までの部分的な文字列を指定することにより、仮想レベルでblobを検索できることです。

パスに「/」を追加し、検索用の部分的な文字列を追加するこれら2つのことにより、仮想「ファイルシステム」ストレージが作成されます。


C#サンプルを共有できますか?blob.Nameは読み取り専用プロパティであるため、 "/"を使用してblob.Nameを作成することはできません
ABB

34

フォルダーをフィルターする方法を尋ねる@ afr0によるコメントがあります。

GetDirectoryReferenceまたはを使用してコンテナblobをループし、タイプをチェックする方法は2つあります。以下のコードは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

1
それは良い情報ですが、「BLOBコンテナーにサブディレクトリを作成する方法」と答えますか?
コダ

19

Azure Portalでは、ファイルのアップロード中に以下のオプションがあります。

ここに画像の説明を入力してください



4

サブディレクトリを作成する必要はありません。blobコンテナーを作成し、以下のコードのように変数filenameのようなファイル名を使用します。

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ストレージには実際のフォルダー管理はありません。

ファイル名に「/」を使用すると、ファイルシステムの一部の機能を実現できますが、これには多くの制限があります(たとえば、「フォルダ」の名前を変更する必要がある場合はどうなりますか?)。

一般的なルールとして、ファイルコンテナ内でできるだけフラットに保ち、アプリケーションでエンドユーザーに公開する構造を管理します(たとえば、データベース内のネストされたフォルダ構造を管理し、それぞれにレコードを作成します)ファイル、container-nameとfile-nameを使用してBLOBを参照)。


1

Azure Sample first-serverless-appを試しているときに同様の問題が発生しました。
$ webの前にある\を削除して解決した方法の情報を次に示します。

注:$ 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

-1

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

3
質問のタグはC#
次のとおりです

@Dementicしたがって、私が言及したCoffeeScriptは、単なるJavaScriptであり、くずがない。C#に移植するのは難しいことではないはずです。特に、プログラミング言語でさえも受け入れられていない回答と比較してください。
Cees Timmerman、2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.