2011-08-19 78 views
0

我得有相似的名字存儲在CDN(Rackspace公司CloudFiles)通話錄音:下載文件,並設置下載的文件名

KPOWIEJFIE2034020SVN10ASKZALBMRI.mp3

(他們」 Twilio調用SID)。

我的應用程序(CakePHP)顯示這些錄音的列表,並使用<audio>標記來允許它們在CDN上的頁面上播放。我需要添加選項直接下載文件,但我想要下載名爲更像這樣的文件:

從Alex致電Firm,Inc,2011年8月19日下午4:00。 mp3

我知道如何使用PHP和readfile()將名稱設置爲任何我想要的名稱,但這需要通過我的VPS流式傳輸文件數據。除了爲帶寬(一次通過CDN和一次通過我的VPS)進行兩次計費之外,這將破壞CDN(速度和可用性)文件的目的。爲了安全起見,我只用CDN上的呼叫SID命名文件。

我可以在瀏覽器端以某種方式做到這一點嗎? JavaScript可以即時更改下載文件的名稱?

我感謝任何幫助!

+0

您必須以某種方式更改發送到用戶瀏覽器的「Content-disposition:」標頭。該標題可用於設置文件名和創建日期等內容。 我不知道如何以這種方式修改標題,但可以通過在服務器上緩存錄制內容來節省一些帶寬,以便您只收取一次雙倍帶寬的費用。 –

+0

https://forums.aws.amazon.com/thread.jspa?threadID=44958&tstart=0 - 這可能有幫助,我不確定你可以在Rackspace上做什麼 –

回答

1

創建文件時應該可以使用set an object's Content-Disposition。例如,

PUT /<api version>/<account>/<container>/<object> HTTP/1.1 
Host: storage.clouddrive.com 
X-Auth-Token:-89ab-cdef-0123-456789abcdef 
Content-Type: audio/mpeg 
Content-Disposition: attachment; filename=Whatever_Filename_I_Want.mp3 

該文件將仍然被存儲爲無論您<object>名字,但在檢索時會顯示爲Whatever_Filename_I_Want.mp3

編輯:根據the documentation,你也可以更新文件的元數據使用此方法。

+0

我會試試這個。謝謝! –

+0

這工作得很好。將文件添加到CloudFiles時設置Content-Disposition標頭,並且它工作正常。必須對RackSpace的PHP API文件進行修改才能啓用該功能。 –

+0

優秀!很高興能幫上忙。不要忘記標記正確的答案,並用綠色的對號標記;) –

2

該文件名基於所請求的URL以及在獲取URL時附加到響應的頭部。除非您代理它,或者可以安排一個「友好」的url來指向資源,否則您無法控制瀏覽器如何下載文件,因爲請求將由機架空間服務器處理,而不是由您的代碼處理。

JS無法控制獲取/下載過程,除了可能會損壞進入<audio>標記的url。但是然後你只能受到限制,仍然允許URL與雲文件服務器相關。

1

根據我對文檔的理解,您可以在CDN上爲您的目的構建目錄結構。因此,不要依靠文件名的安全性,可以將安全性置於目錄名稱中。這樣,http://cdn.example.com/KPOWIEJFIE2034020SVN10ASKZALBMRI.mp3就變成了http://cdn.example.com/KPOWIEJFIE2034020SVN10ASKZALBMRI/Call_from_Alex_to_Firm,_Inc,_8-19-2011_4:00pm.mp3,它將按照您的意願完全下載,而不會犧牲安全性。