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

3
我正在尝试将一张图片保存到我们的Azure博客存储中。通过下方代码片段链接提供的有用响应,我已经成功将文件保存到我们的顶级容器。不幸的是,我希望该文件保存到该容器的子目录中。但是,无论如何,我都无法使其工作。
目前,该图片正保存在我们的“images”容器中。在该容器内有一个名为“members”的文件夹。我希望文件保存到该子目录中,即“images/members”。我尝试将“images/members”传递给GetBlockBlobReference,但是文件根本没有保存(或者至少我找不到它)。
这似乎应该很简单。先行致谢。
  CloudBlobClient blobClient = account.CreateCloudBlobClient();
  CloudBlobContainer container = blobClient.GetContainerReference("images");
  CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
  blockBlob.UploadFromStream(stream);

顶级容器。带有 GUID 的图像是我上传的图像

“成员”目录。按最新排序;没有最近出现的内容

有用的解决方案,使我成功保存到顶级容器


当你尝试访问"images/members"时发生了什么?你使用什么工具来查看你的容器和 Blob?这个工具:https://azure.microsoft.com/en-us/features/storage-explorer/? - Saher Ahwal
不要更改容器引用,保持其指向图像。您需要将块 Blob 引用更改为“members/filename”。 - Saher Ahwal
使用Azure Storage Explorer查看容器。 Members是一个现有的“目录”,其中已保存了许多图像。 在按建议更改代码之前,我会看到我的上传文件保存在图像容器中(在存储资源管理器中)。 当我按照建议更改代码并导航到成员“目录”时,我看到所有旧图像。 我按“最后修改”排序,但列表顶部没有最近出现的文件。 再次感谢! - BoGoodSki
使用容器“images”下的前缀为“members/”的listBlobs调用,您应该能够获取在members文件夹下创建的所有blob。这就是存储资源管理器在显示文件时所做的操作。 - Saher Ahwal
3个回答

6

我觉得这是正确的答案。但是,我已经按建议进行了更改,但仍然无法在成员“文件夹”中看到图像。就好像我们只是在让这个工作的边缘,但还没有完全实现。不过,这个解决方案很有道理!谢谢! - BoGoodSki
如果这解决了你的问题,请@BoGoodSki点赞/接受答案或两者都进行。谢谢! - Saher Ahwal
我已经点赞了(但是没有足够的声望来记录它)。我没有接受它作为解决方案,因为文件仍然没有到达“成员”。不太确定发生了什么。解决方案很有道理,而且在我看来应该有效,但实际上并没有。一旦我让它正常运行,我就会接受这个答案。 - BoGoodSki
现在它可以工作了。我接受了这个解决方案。显然,我只需要在存储资源管理器中点击“加载更多”大约1000次,就可以让最近添加的图像浮动到顶部。 - BoGoodSki
@BoGoodSki,我很高兴它正在工作。是的,存储资源管理器会调用ListBlob并设置一些最大值,你需要根据需要加载更多。谢谢! - Saher Ahwal

3
在文件名中使用斜杠(/)将创建一个“文件夹”。我用“文件夹”这个词,因为它是一个虚拟文件夹,是一个给我们人类理解文件夹的技巧。实际上只有一个分组级别,即Container
文件名中的每个斜杠(/)代表一个“文件夹”,因此创建一个名为firstFolder/secondFolder/filename.txt的Blob将创建一个具有该确切名称的文件。看起来像是路径为firstFolder -> secondFolder的文件。您可以请求容器使用useFlatBlob设置为true的ListBlobs方法,返回特定容器中的所有Blob,包括所有文件夹中的Blob。
您还可以通过获取DirectoryReference并列出其中的Blob来请求虚拟文件夹中的所有Blob,方法是使用CloudBlobContainer.GetDirectoryReference
更多信息请参见:使用Blob资源

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接