我在CDN (Rackspace CloudFiles)上存储了电话录音,其名称如下:
KPOWIEJFIE2034020SVN10ASKZALBMRI.mp3
(他们被称为“小岛屿发展中国家”)。
我的应用程序(CakePHP)显示了这些录音的列表,并使用一个<audio>标记允许从CDN直接在页面上播放它们。我还需要添加直接下载文件的选项,但我希望下载名为以下内容的文件:
2011年8月19日,亚历克斯打电话给公司4:00pm.mp3
我知道如何使用PHP和readfile()来设置任何我想要的名称,但这需要通过我的VPS流文件数据。除了两次计费带宽(一次通过CDN,一次通过我的VPS)之外,这将使我的文件在CDN (速度和可用性)上的目的落空。为了安全起见,我只使用CDN上的调用SID来命名文件。
我能用浏览器来做这个吗?JavaScript可以动态更改下载文件的名称吗?
我很感激你的帮助!
发布于 2011-08-19 15:10:02
在创建文件时,您应该能够使用设置对象的内容配置。例如,
PUT /<api version>/<account>/<container>/<object> HTTP/1.1
Host: storage.clouddrive.com
X-Auth-Token: 01234567-89ab-cdef-0123-456789abcdef
Content-Type: audio/mpeg
Content-Disposition: attachment; filename=Whatever_Filename_I_Want.mp3该文件仍将以<object>名称的形式存储,但检索后将显示为Whatever_Filename_I_Want.mp3。
编辑:根据文献资料,您还可以使用此方法更新文件的元数据。
发布于 2011-08-19 15:01:40
文件名基于所请求的URL和获取URL时附加到响应的标题。除非您代理它,或者可以安排一个“友好”的url指向资源,否则您无法控制浏览器如何下载该文件,因为请求将由rackspace服务器处理,而不是由您的代码处理。
JS除了可能损坏进入<audio>标记的url之外,无法控制获取/下载过程。但是,您只限于那些仍然允许URL与cloudfiles服务器相关的内容。
发布于 2011-08-19 15:12:02
根据我对文档的了解,您可以为您的目的在CDN上构建一个目录结构。因此,您可以将安全性放入目录名中,而不是依赖文件名的安全性。这样,http://cdn.example.com/KPOWIEJFIE2034020SVN10ASKZALBMRI.mp3就变成了http://cdn.example.com/KPOWIEJFIE2034020SVN10ASKZALBMRI/Call_from_Alex_to_Firm,_Inc,_8-19-2011_4:00pm.mp3,它将按照您的意愿下载,而不会牺牲安全性。
https://stackoverflow.com/questions/7123453
复制相似问题