如何将文件保存到Azure blob容器中的子文件夹?

时间:2018-04-09 21:50:22

标签: azure blob azure-storage-blobs azure-blob-storage

我正在尝试将图像保存到我们的Azure博客存储中。感谢通过代码段下方的链接提供的有用响应,我能够将文件成功保存到顶级容器中。不幸的是,我希望将文件保存到该容器中的子目录中。而且,对于我的生活,我无法让它发挥作用。

目前,图片正在保存到我们的"图像"容器。在该容器内是一个文件夹,"成员"。我想将文件保存到该子目录。所以" images / members"。我试图通过" images / members" GetBlockBlobReference然后文件根本没有保存(或者,至少我找不到它)。

这看起来应该很简单。提前致谢。

  CloudBlobClient blobClient = account.CreateCloudBlobClient();
  CloudBlobContainer container = blobClient.GetContainerReference("images");
  CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
  blockBlob.UploadFromStream(stream);

Top-level container. The image with the Guid is one that I uploaded

The "members" directory. Sorted by most recent; nothing recent appearing

Helpful solution that got me to saving successfully to the top-level container

3 个答案:

答案 0 :(得分:3)

“images”是容器的名称。

您需要做的是从

更改此行
CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);

CloudBlockBlob blockBlob = container.GetBlockBlobReference("members/" + filename);

然后您可以使用Azure Storage Explorer查看您的文件和文件夹: https://azure.microsoft.com/en-us/features/storage-explorer/

答案 1 :(得分:0)

在文件名中使用斜杠(/)将创建一个“文件夹”。我使用'文件夹',因为它是一个虚拟文件夹,这个技巧用于向人们提供文件夹的概念。实际上只有一个级别的分组是Container

文件名中的每个斜杠(/)代表一个“文件夹”,因此创建一个文件名为firstFolder/secondFolder/filename.txt的blob将创建一个具有该名称的文件。这看起来像一个路径为firstFolder的文件 - > secondFolder。您可以在ListBlobs设置为true的情况下向容器询问useFlatBlob,并返回特定容器中的所有blob。所以所有文件夹中都有Blob。

您还可以通过使用CloudBlobContainer.GetDirectoryReference获取DirectoryReference并在其下列出blob来询问虚拟文件夹中的所有blob。

此处有更多信息:Work with Blob resources

答案 2 :(得分:0)

你可以按照这段代码来做同样的事情。

output = detected_anomaly.to_csv (encoding = "utf-8", index=False)
blob_path = 'blobfolder1/blobfolder2/' 
blob_path_anomalies = blob_path + '<created_blob_folder_name>/demo.csv'
blob_service.create_blob_from_text(container_name, blob_path_anomalies, output)