2017-07-07 81 views
0

我正在使用PHP Azure庫創建一個SAS令牌,用於在單擊鏈接後向網站的已驗證用戶傳遞文件(文件存儲,而非blob,而非公開)。該鏈接會導致創建SAS的PHP頁面,然後發出Location:標頭來調用下載。沒有任何已知的問題導致最終完成下載。如何防止從Azure下載的CDN位置重定向從改變瀏覽器位置?

在附圖中重複步驟1-4 ..每個文件選擇一個。

問題是,由於網址位於網站外部(CDN),因此使用了位置:$ url + sas。這會改變瀏覽器的位置,但不會反映在瀏覽器中......標題會將該文件作爲附件進行推送。

如上所述,用戶可以繼續點擊始發頁面上的其他下載鏈接,並且它們工作正常(這是可取的),但是他們第一次選擇同一頁面上的任何鏈接以轉到始發頁面/站點的其他地方(如在示例中單擊「主頁」所示,顯示瀏覽器的真實位置(accountname.file.core.windows.net/etc),並且用戶從Azure文件存儲服務器獲取資源未找到錯誤(顯示如下圖表)

2017年10月7日將此添加圖像以示出所使用的工藝:

Link to SAS process chart

對於如何從CDN推送網址下載而不使瀏覽器位置以這種方式得到「重置」的問題,我略有遺憾。我多次從本地服務器/文件完成此操作,但位置:$ url/SAS方面是不同的動態。在我看來,這應該與將瀏覽器指向可公開訪問的URL和EXE推動下載並且仍然允許用戶在發起站點上說的行爲沒有區別。我開始認爲這應該是重定向而不是位置,但我還沒有找到很多Azure/SAS /文件存儲示例來支持它。我必須在這裏錯過簡單的東西,但它逃避了我。

回答

0

我不確定我是否正確地得到它,您似乎想要從Azure存儲中下載文件,而不必使用PHP腳本在瀏覽器中更改地址

基本上,您可以使用下面的file_get_contents()函數來實現此目的。

header('Content-Type: application/octet-stream'); 
header("Content-Disposition: attachment; filename=$filename"); 
$response = file_get_contents($SASUri); 

echo $response; 
+0

你好,亞倫,謝謝。糾正我,如果我錯了,但我的理解是,PHP將嘗試通過我不希望的服務器處理文件。我只是試圖通過SASToken「交付」到Azure文件存儲CDN的交付。我可以做到這一點,但是,當他們點擊除CDN之外的任何鏈接時,該過程就會設置導航失敗的瀏覽器。我通過指向插圖的鏈接和我看到的錯誤更新了OP。 –

相關問題