2012-10-24 299 views
5

我有一個應用程序允許用戶上傳存儲在Azure Blob存儲中的照片。用戶還可以查看這些照片。要查看它們,我們希望應用程序將圖像下載到默認的下載位置。目前,上傳完美。但是我發現的用於Azure API的下載功能似乎沒有做任何事情。此外,我無法真正指定下載位置,因爲此功能需要在臺式機/筆記本電腦以及具有不同默認目錄的移動設備上運行。從Azure Blob存儲下載文件

這看起來應該很簡單,但我找不到任何東西來幫助我。

這裏是我的代碼示例:

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

沒有參考'照片'對象? –

回答

5

你不能有客戶端直接從Blob存儲下載的文件,並使用內置的瀏覽器功能進行保存的原因嗎?如果這些文件是私人的,那麼生成SAS簽名相當容易。這將卸載通過您的服務器的下載,並消除這種開銷。

+2

你如何做到這一點? – Demodave

3

我想知道你對此代碼有什麼期望,但特別是在不同平臺的情況下,這是行不通的。我建議您改用DownloadToStream方法。然後,您可以決定如何處理流。例如詢問用戶他想要保存文件的位置。

+0

鏈接已停用請更新 – Eric

+0

已更正 - 特別是針對@Eric! – astaykov

3

這裏:

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

+0

如果我想讓用戶選擇路徑,該怎麼辦? –

+0

然後你會在你的圖像名稱前加上它們的路徑,例如:string userPath =「無論他們選擇什麼」;所以這將是var imgPath = userPath + photo.ImgName;在嘗試保存之前,您可能需要檢查目錄是否存在。 – ElvisLives