我正在使用Azure Blob存儲,並且我希望用戶能夠下載文件。當用戶點擊他們想下載的文件時,我使用AJAX生成共享訪問簽名並返回從其下載的URL。那麼有沒有什麼方法可以使用Javascript下載文件?或者是否有其他方法可以使用...我也希望它不能運行服務器端,因爲當我應該能夠直接從URL下載時,沒有任何理由會產生不必要的成本...Javascript下載URL - Azure Blob存儲
基本上,Dropbox是如何做到的......是否以某種方式提交某種形式?它甚至不必如此。
我正在使用Azure Blob存儲,並且我希望用戶能夠下載文件。當用戶點擊他們想下載的文件時,我使用AJAX生成共享訪問簽名並返回從其下載的URL。那麼有沒有什麼方法可以使用Javascript下載文件?或者是否有其他方法可以使用...我也希望它不能運行服務器端,因爲當我應該能夠直接從URL下載時,沒有任何理由會產生不必要的成本...Javascript下載URL - Azure Blob存儲
基本上,Dropbox是如何做到的......是否以某種方式提交某種形式?它甚至不必如此。
如果我理解正確,您希望用戶在單擊SAS URL時看到Open/Save As
提示。
假設我的理解是正確的,最近Windows Azure Storage宣佈了一些增強功能。其中一項增強功能是添加了Content-Disposition
blob屬性,該屬性允許此Open/Save As
提示在用戶單擊blob的SAS鏈接時顯示。隨着Content-Disposition
,你有兩個選擇:
Content-Disposition
爲BLOB屬性:在這種情況下,每當SAS鏈路上的用戶點擊,他們將被提示保存文件。但在這種情況下,他們會總是被提示如此SAS鏈接與否,用戶將永遠無法在瀏覽器中看到文檔內聯。您可能會發現此鏈接對此有用:http://msdn.microsoft.com/en-us/library/windowsazure/ee691966.aspx。Content-Disposition
作爲SAS URL的一部分:在這種情況下,只有當用戶點擊包含Content-Disposition
的SAS URL時纔會提示用戶。您可能會發現此鏈接對此有用:http://msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx。因此,假設你有一個PNG文件。在選項1中,它絕不會在瀏覽器中內聯顯示,它將被下載到客戶機上,並在計算機上的註冊圖像查看器中打開。在選項2中,如果在SAS URL中設置了Content-Disposition
,則圖像文件將下載到客戶端計算機上,並在計算機上的註冊圖像查看器中打開,否則它將直接顯示在瀏覽器中。
如果您使用.Net,Storage Client library 3.0.0。0支持這個特性,所以你不必編寫REST API的包裝器(但是我認爲你使用的是PHP ...)。
爲了避免重裝/重定向,我使用這個庫:
http://jqueryfiledownload.apphb.com/
如果您需要幫助設置它:http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/
但是如果你想將用戶重定向,你可以使用基本的東西,如:
window.location.href = "http://stackoverflow.com/file.pdf";
我這樣做的方式在過去是通過打開一個隱藏的iframe與下載的網址。沿
var frame = document.createElement('iframe');
frame.src = url; // your Azure url
frame.style.display = 'none';
document.body.appendChild(frame);
請注意,你需要確保你也不要試圖用一個不安全的下載要做到這一點安全(HTTPS)網頁上線(HTTP)
東西
我試過這樣做是爲了我的項目,不能得到'另存爲'對話框出現。服務器端我已經嘗試設置ContentDisposition設定爲這樣:
Blob.Properties.ContentDisposition = "attachment"
Blob.SetProperties()
客戶端我已經給了用戶訪問BLOB像這樣:
document.getElementById("downloadLink").innerHTML = "<a href=" + bloburi + ">" + bloburi + "</a>";
如果我點擊這個鏈接的文件上打開瀏覽器窗口。我如何獲得「另存爲」對話框?
你有什麼想法爲什麼簽名不符合新版本?如果$ version ='2012-02-12'它會生成一個好籤名,但如果我將其更改爲'2013-08-15',它表示簽名不匹配。沒有其他更改,但我沒有看到有關更改如何爲新版本構建簽名的任何內容:http://msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx – Paul
假設您'重新編寫REST API封裝,你是否包含了所有你正在構建'SignatureString'的新參數?請參閱您提到的鏈接中標題爲「構建簽名字符串」的部分。 –
發佈關於使用PHP和最新版本的REST API以及您正在使用的代碼創建SAS URL的其他問題可能不是一個壞主意。我相信這會幫助很多人。 –