2016-09-01 102 views
1

我們的應用程序允許用戶通過網絡瀏覽器上傳文件。文件名稱被映射到一個GUID並且blob名稱變爲GUID。當用戶點擊我們應用程序中的文件時,它應該使用原始文件名而不是GUID blob名稱下載到他們的文件系統(顯示另存爲等)。Azure blob,控制文件名下載

我發現這篇文章和描述如何在通過共享訪問簽名下載時設置blob上的Content-Disposition的類似帖子。

Friendly filename when public download Azure blob

然而,我們的情況有一點不同。我們在容器級別設置了一個SAS(從技術上講,這稱爲「共享訪問策略」,我相信 - 在任何給定時間您最多可以有5個)。當下載的blob,我們只需將SAS追加到URI的末尾,使用...

window.location.href = blobUri + containerSAS; 

...下載團塊。這下載blob,但使用GUID文件名。

我們如何才能採用適用於Container的現有SAS並將blob下載作爲原始文件名?

請記住,這是適用於在個人BLOB一個SAS略有不同的使用情況......

  1. 的SAS是在容器層級(看來這是最好的做法與個別SAS的每個blob)。
  2. 我們從JavaScript下載(而不是C#代碼,您可以在其中設置標題)。

我試圖在上傳過程(PUT操作)期間設置blob的Content-Disposition,但是當我下載blob時似乎沒有什麼區別。在下面,您可以看到爲PUT請求(來自Fiddler)設置的Content-Disposition頭。

enter image description here

謝謝!

+1

您是否可以使用容器訪問策略在blob上生成SAS,或者是否必須使用容器SAS令牌? –

回答

1

我有一個解決方案。我認爲這更像是一種解決方法,但對於每個要下載的文件,我都會進行服務器調用併爲下載操作創建一個特殊的SAS。我可以設置Content-Disposition,現在名爲blob的GUID正在下載它們的原始文件名。