如何在blob容器中创建子目录
例如,
在我的blob容器http://veda.blob.core.windows.net/document/
中如果我存储了一些文件,那么它将是
现在,如何创建子目录
这样我就可以存储文件
答案 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)
答案 4 :(得分:3)
如果您使用Microsoft Azure Storage Explorer,则会有一个"新文件夹"允许您在容器中创建文件夹的按钮。 这实际上是一个虚拟文件夹:
答案 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门户的方式。 如果要创建文件夹结构,则必须使用每个文件的完整路径来完成。
您需要单击“上传Blob”,展开“高级”,然后在其路径上写上“上传到文件夹”
因此,假设您有一个要上传的文件夹资产,该文件夹的内容如下所示
如果在js文件夹下有一个名为main.js的文件夹,则需要在上传到文件夹中输入路径“ assets / js”。 现在,必须对每个文件执行此操作。如果您有很多文件,建议您以编程方式进行处理。
答案 9 :(得分: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
希望这对某人有帮助
答案 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