我有一个允许用户上传照片的应用程序,这些照片存储在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);
导致服务器请求但没有任何反应,也就是没有下载文件。
答案 0 :(得分:6)
您是否有任何理由不能让客户端直接从blob存储中下载文件并使用内置的浏览器功能来保存它?如果文件是私有的,则生成SAS签名非常容易。这将卸载通过您的服务器下载并删除该开销。
答案 1 :(得分: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
答案 2 :(得分:3)
我想知道您对此代码的期望是什么,但特别是在不同平台的情况下,这不起作用。我建议你改用DownloadToStream方法。然后,您可以决定如何处理流。例如,询问用户他想要保存文件的位置。