web-dev-qa-db-ja.com

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

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

74
veda

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

113
smarx

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

ストレージのような仮想の「ファイルシステム」を作成するには、「/」を含むblob名を使用して、保存方法を自由に変更できます。また、素晴らしいのは、「/」までの部分的な文字列を指定することで、仮想レベルでblobを検索できることです。

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

31
Egon

@ 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

30
AntonB

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

enter image description here

10
Pritam

Microsoft Azure Storage Explorer を使用する場合、コンテナーにフォルダーを作成できる[新しいフォルダー]ボタンがあります。これは実際には仮想フォルダーです。

enter image description here

3
Setyo N

サブディレクトリを作成する必要はありません。次のコードのように、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
1
Khabir

前述の@Egonのように、BLOBストレージには実際のフォルダー管理はありません。

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

一般的なルールとして、ファイルを可能な限りフラットコンテナーに保持し、エンドユーザーに公開したい構造をアプリケーションに管理させます(たとえば、ネストされたフォルダー構造を管理します)- 私のデータベース内、各ファイルのレコードを持ち、container-nameとfile-nameを使用してBLOBを参照します)。

1
Assaf S.

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
0
Cees Timmerman

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
0
Nara