Windows Azure:如何在blob容器中创建子目录

时间:2010-04-11 22:52:34

标签: c# azure directory azure-blob-storage

如何在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

11 个答案:

答案 0 :(得分:109)

要添加到Egon所说的内容,只需创建一个名为“folder / 1.txt”的blob,它就可以了。无需创建目录。

答案 1 :(得分:30)

实际上只有一层容器。你可以虚拟地创建一个像分层存储一样的“文件系统”,但实际上一切都将在1层,即容器中。

为了创建类似存储的虚拟“文件系统”,您可以使用包含“/”的blob名称,以便您可以按照存储方式执行任何操作。此外,最棒的是你可以通过提供一个部分字符串来搜索虚拟级别的blob,最多为'/'。

这两件事,在路径中添加'/'和搜索的部分字符串,共同创建了一个虚拟的“文件系统”存储。

答案 2 :(得分:26)

@ 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

答案 3 :(得分:8)

在Azure门户中,我们在上传文件时有以下选项:

enter image description here

答案 4 :(得分:3)

如果您使用Microsoft Azure Storage Explorer,则会有一个"新文件夹"允许您在容器中创建文件夹的按钮。 这实际上是一个虚拟文件夹:

enter image description here

答案 5 :(得分:1)

正如上面提到的@Egon,BLOB存储中没有真正的文件夹管理。

您可以在文件名中使用'/'来实现文件系统的某些功能,但这有很多限制(例如,如果您需要重命名“文件夹”会发生什么?)。

作为一般规则,我会将容器中的文件保持平坦,让我的应用程序管理我想向最终用户公开的任何结构(例如管理嵌套文件夹)结构在我的数据库中,有一个每个文件的记录,使用容器名和文件名引用BLOB。

答案 6 :(得分:0)

尝试Azure示例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

答案 7 :(得分:0)

您不需要创建子目录。只需创建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

答案 8 :(得分:0)

想添加UI门户的方式。 如果要创建文件夹结构,则必须使用每个文件的完整路径来完成。

enter image description here

您需要单击“上传Blob”,展开“高级”,然后在其路径上写上“上传到文件夹”

因此,假设您有一个要上传的文件夹资产,该文件夹的内容如下所示

enter image description here

如果在js文件夹下有一个名为main.js的文件夹,则需要在上传到文件夹中输入路径“ assets / js”。 现在,必须对每个文件执行此操作。如果您有很多文件,建议您以编程方式进行处理。

答案 9 :(得分:0)

我需要从 Jenkins 管道执行此操作,因此,需要将文件上传到特定文件夹名称,而不是上传到根容器文件夹。我使用 --destination-path 可以是 folderfolder1/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

希望这对某人有帮助

答案 10 :(得分:-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