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

184141 次浏览

实际上只有一层容器。您实际上可以创建一个类似于分层存储的“文件系统”,但实际上所有内容都将在1层中,即它所在的容器中。

为了创建一个类似存储的虚拟“文件系统”,您可以使用包含“/”的 blob 名称,这样您就可以按照自己喜欢的方式进行存储。另外,最棒的是您可以在虚拟级别上搜索一个 blob,通过给出一个部分字符串,直到’/’。

在路径中添加一个’/’和一个用于搜索的部分字符串,这两样东西一起创建了一个虚拟的“文件系统”存储。

要添加到 Egon 所说的,只需创建名为“ file/1.txt”的 blob,它就会工作。不需要创建目录。

@ 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

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

如果您使用 微软 Azure 存储浏览器,有一个“新建文件夹”按钮,允许您在容器中创建一个文件夹。 这实际上是一个虚拟文件夹:

enter image description here

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

enter image description here

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

您可以在文件名中使用’/’来实现文件系统的一些特性,但是这有很多限制(例如,如果需要重命名“文件夹”,会发生什么情况?).

一般来说,我会将我的文件 越平越好保存在一个容器中,并让我的应用程序管理我想公开给最终用户的任何结构(例如,管理一个嵌套的文件夹结构 在我的数据库里,为每个文件创建一条记录,使用容器名和文件名引用 BLOB)。

在尝试 Azure 样本 第一个无服务器应用程序时遇到了类似的问题。
这里的信息,我如何解决删除前面的 $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

您不需要创建 sub directory。只需创建 blob container并使用类似于变量 文件名的文件名,代码如下:

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

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

enter image description here

你需要点击 Upload Blob,展开 Advanced 并把它放在路径上说“ Upload to Folder”

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

enter image description here

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

我需要从詹金斯管道这样做,所以,需要上传文件到特定的文件夹名称,但不到根容器文件夹。我使用了—— target-path,它可以是 文件夹文件夹1/文件夹2

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

希望这对某人有所帮助

没有创建文件夹/目录的直接选项。但是,如果你想上传一些文件到文件夹,然后在上传文件时,你需要传递文件夹名称在提前部分。例如,如果我想上传一个图像到一个资产命名的文件夹,然后我的上传窗口将看起来像 this

这将创建一个文件夹名称资产,并将文件上传到该文件夹。需要注意的是文件夹名和文件名是区分大小写的。

对于一个在动态目录中挣扎的人来说
根据第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);
}

在 Azure 存储浏览器中查看结果 The four text files uploaded

使用 Python: https://youtu.be/Bnrargw-eM0查看此特性的视频演示