127

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

4

13 に答える 13

160

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

于 2010-04-12T18:34:08.710 に答える
47

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

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

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

于 2010-04-11T23:21:14.263 に答える
38

@ 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

于 2016-01-04T23:43:09.580 に答える
28

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

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

于 2017-11-08T06:32:29.063 に答える
8

を作成する必要はありませんsub directory。以下のコードblob containerのように、変数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
于 2019-06-22T19:09:02.767 に答える
6

Microsoft Azureストレージエクスプローラーを使用する場合は、コンテナー内にフォルダーを作成できる[新しいフォルダー]ボタンがあります。これは実際には仮想フォルダです。

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

于 2017-05-15T09:40:28.480 に答える
3

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

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

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

于 2018-06-06T08:49:06.557 に答える
3

UIポータルの方法も追加したかった。フォルダ構造を作成する場合は、各ファイルの完全なパスを使用して作成する必要があります。

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

Upload Blobをクリックし、Advancedを展開して、「UploadtoFolder」というパスを配置する必要があります。

したがって、アップロードするフォルダーアセットがあり、フォルダーのコンテンツは次のようになっているとします。

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

また、jsフォルダーの下にmain.jsという名前のフォルダーがある場合は、フォルダーへのアップロードでパス「assets/js」を入力する必要があります。これは、ファイルごとに実行する必要があります。ファイルが多い場合は、プログラムで実行することをお勧めします。

于 2020-12-03T13:37:27.653 に答える
1

AzureSamplefirst-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
于 2018-07-01T04:20:28.167 に答える
0

Jenkinsパイプラインからこれを行う必要があったため、ファイルを特定のフォルダー名にアップロードする必要がありましたが、ルートコンテナーフォルダーにはアップロードしませんでした。私は--destination-pathを使用します。これはfolderまたはfolder1/folder2にすることができます

az storage blob upload-batch --account-name $AZURE_STORAGE_ACCOUNT --destination ${CONTAINER_NAME} --destination-path ${VERSION_FOLDER} --source ${BUILD_FOLDER} --account-key $ACCESS_KEY

これが誰かに役立つことを願っています

于 2021-02-17T22:24:30.043 に答える
0

フォルダ/ディレクトリを作成する直接のオプションはありません。ただし、フォルダに何かをアップロードしたい場合は、ファイルをアップロードするときに、事前セクションでフォルダ名を渡す必要があります。たとえば、フォルダという名前のアセットに画像をアップロードする場合、アップロードウィンドウは次のようになります。ここに画像の説明を入力してください

これにより、フォルダ名アセットが作成され、そのフォルダにファイルがアップロードされます。また、フォルダ名とファイル名では大文字と小文字が区別されることに注意してください。

于 2021-10-07T12:13:45.640 に答える
0

動的ディレクトリに苦労している人のために
バージョン12による

<PackageReference Include="Azure.Storage.Blobs" Version="12.10.0"/>

ディレクトリまたはフォルダのパスを円記号で区切るのは簡単です。この場合、それらは自動的に作成されます。例:

public async Task UploadFile(string env, string filePath, string filename, Guid companyId, Guid assetId, string baseKey)
{
    var blobContainer = blobServiceClient.GetBlobContainerClient("graphs-data");
    if (!blobContainer.Exists())
    {
      blobContainer.Create();
    }
    var blobClient = blobContainer.GetBlobClient($"input/{env}/{companyId}/iotasset/{assetId}/{baseKey}/{filename}");
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
      await blobClient.UploadAsync(fs, overwrite: true);
}

AzureStorageExplorerの結果ビュー アップロードされた4つのテキストファイル

于 2022-03-01T12:32:52.263 に答える
-4

上記の受け入れられた英語の代わりにC# :

CloudBlobContainer container = new CloudBlobContainer(new Uri(sasUri));
CloudBlockBlob blob = container.GetBlockBlobReference(filePathInSyncFolder);
LocalFileSysAccess.LocalFileSys uploadfromFile = new LocalFileSysAccess.LocalFileSys();
uploadfromFile.uploadfromFilesystem(blob, localFilePath, eventType);

私の意見では、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
于 2016-02-19T14:53:25.970 に答える