从Azure Blob存储中下载文件

7
我有一个应用程序,允许用户上传照片,并将它们存储在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);会触发服务器请求,但是没有任何反应,也就是说没有下载任何文件。

1
没有对 'photo' 对象的引用? - SHEKHAR SHETE
3个回答

6

有没有任何原因不允许客户端直接从Blob存储中下载文件并使用内置的浏览器功能保存呢?如果这些文件是私有的,生成一个SAS签名非常容易。这将使下载的负载不必经过您的服务器,避免了服务器负载。


3
你好,我该如何做到这一点? - Demodave
1
@Demodave,请将容器设为公共(在Azure门户中),然后客户端只需引用Blob的Azure存储URI并通过HTTP/S下载即可。 - Eric

4
这里:
blob.DownloadToFile(photo.ImageName);

您需要告诉它文件保存的位置和您想要的名称:

blob.DownloadToFile("C:\mycutepuppy.jpg");

您可以使用 System.Environment.SpecialFolder 枚举来根据当前系统找出文件夹,然后添加您想要的图片名称;
这是一个更完整的例子:
var imgPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), + photo.ImageName);

blob.DownloadToFile(imgPath);

这将把图片保存到用户桌面目录的正确路径。以下是有关特殊文件夹枚举的文档。 http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

如果我想让用户选择路径怎么办? - c.dunlap
然后,您将在图像名称前面添加其路径,例如:string userPath =“他们选择的任何内容”;因此,它将是var imgPath = userPath + photo.ImgName;在尝试保存之前,您可能还想检查目录是否存在。 - ElvisLives

3

我想知道你对这段代码有什么期望,但在不同平台上,这可能无法正常工作。我建议您使用DownloadToStream方法。然后,您可以决定如何处理流。例如,询问用户想将文件保存在哪里。


更正 - 特别为 @Eric! - astaykov
好的,如果你快进到2018年,你也可以使用DownloadToStreamAsync...答案是在2012年发布的,@MdAslam - astaykov

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