C# 从Azure Blob存储下载文件

C# 从Azure Blob存储下载文件,c#,azure,download,azure-storage-blobs,C#,Azure,Download,Azure Storage Blobs,我有一个应用程序,允许用户上传存储在Azure Blob存储中的照片。用户还可以查看这些照片。要查看它们,我们希望应用程序将图像下载到默认下载位置。目前,上传效果很好。但是我为Azure API找到的下载功能似乎没有任何作用。此外,我无法指定下载位置,因为该功能需要在桌面/笔记本电脑以及具有不同默认目录的移动设备上运行 这似乎应该很简单,但我找不到任何帮助 以下是我的代码示例: CloudBlobContainer container = blobClient.GetContainerRefer

我有一个应用程序,允许用户上传存储在Azure Blob存储中的照片。用户还可以查看这些照片。要查看它们,我们希望应用程序将图像下载到默认下载位置。目前,上传效果很好。但是我为Azure API找到的下载功能似乎没有任何作用。此外,我无法指定下载位置,因为该功能需要在桌面/笔记本电脑以及具有不同默认目录的移动设备上运行

这似乎应该很简单,但我找不到任何帮助

以下是我的代码示例:

CloudBlobContainer container = blobClient.GetContainerReference("photos");
CloudBlob blob = container.GetBlobReference(photo.BlobUrl);
//copy blob from cloud to local gallery
blob.DownloadToFile(photo.ImageName);

blob.DownloadToFile(photo.ImageName)导致服务器请求,但什么也没有发生,即没有下载任何文件。

我想知道您对这段代码有什么期望,但特别是在不同平台的情况下,这将不起作用。我建议你改用这种方法。然后您可以决定如何处理该流。例如,询问用户希望将文件保存在何处。

此处:

blob.DownloadToFile(photo.ImageName);
您需要告诉它保存文件的位置和名称:

blob.DownloadToFile("C:\mycutepuppy.jpg");
您可以使用System.Environment.SpecialFolder enum根据当前系统找出文件夹,然后附加您想要的图像名称

下面是一个更完整的示例:

var imgPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), + photo.ImageName);

blob.DownloadToFile(imgPath);
这会将图像保存到用户桌面目录所在的正确路径。以下是有关特殊文件夹枚举的文档


有什么原因不能让客户端直接从blob存储下载文件并使用内置浏览器功能保存?如果文件是私有的,则生成SAS签名非常容易。这将从您的服务器上卸载下载,并消除开销。

如果我想让用户选择路径,该怎么办?然后您可以在图像名称前面预先添加他们的路径,如:string userPath=“无论他们选择什么”;因此它将是var-imgPath=userPath+photo.ImgName;在尝试保存之前,您可能需要检查目录是否存在。没有“photo”对象的引用?更正-尤其是@Eric!好吧,如果你快进到2018年,你也可以使用DownloadToStreamAsync。。。答案发布于2012年,@MdAslamHow do you do this?@demoave,公开容器(在azure门户中),然后客户端可以引用blob的azure存储uri并通过http/s下载。