我有一個運行在azure中的MVC網絡應用程序,可以提供存儲在雲存儲中的大文件,如mp3,pdf等等。什麼是提供這些文件的最佳方式,因此用戶在點擊鏈接/按鈕時可以下載它們?從Azure雲存儲下載大文件的最佳方式
簡單的方法是隻是告訴他們:
<a href="...blob.core.windows.net/container/file.mp3">
但隨後用戶必須右鍵點擊下載。
強制進行下載,您可以返回一個文件的ActionResult:
public ActionResult GetPDF(string filename)
{
return File(filename, "application/pdf", Server.HtmlEncode(filename));
}
這樣做的缺點(我認爲)是,webrole在文件並將其輸出流中讀取數據,這將消耗資源,並可能讓許多用戶陷入困境。而簡單的href鏈接解決方案基本上將工作交給工作人員,讓瀏覽器直接與雲存儲進行對話。
我正確嗎?我應該關心卷軸上的額外工作嗎?
是否有另一種方式來強制文件下載而不會增加網絡負擔?
UPDATE:
所以我落得這樣做上傳MP3與內容類型「二進制/八位字節流」 - 這似乎強制下載提示。不知道這是否是一種好的做法,但它迄今爲止工作。
謝謝。是的,內容類型設置正確(音頻/ mpeg),並且當您單擊它在瀏覽器中播放的鏈接時。我希望有一種方法可以在不通過網頁的情況下啓動下載。似乎應該可以用javascript來實現?你只是想告訴瀏覽器下載而不是播放它。 – PeteShack 2011-05-13 14:46:25
我發現缺少一部分難題,從blob存儲下載時,它沒有將Content-disposition頭設置爲附件,因此瀏覽器不知道您想將其視爲下載而不是隻需要做一些事情(我想你可以在Azure的預發佈版本中進行設置)。對Blob和Content-disposition的簡單搜索將爲您提供大量有關如何在MVC之外完成這些任務的示例。我懷疑這是所有的文件操作結果。 – knightpfhor 2011-05-18 04:45:23