mic*_*osa 13 php download amazon-s3
我正在尝试使用http://code.google.com/p/amazon-s3-php-class/来强制下载AWS S3中的文件.我有一个mp3,我希望人们"玩"或"下载".默认情况下,当您直接在s3上访问文件时,它开始在浏览器中播放.我需要添加一个实际下载的选项.我用谷歌搜索,发现什么都没有.我从概念上知道需要发生什么,但不知道如何制作它.我知道我需要将标题修改为Content-Disposition:attachment.任何帮助将不胜感激.
谢谢,迈克尔
Ale*_*eth 21
亚马逊现在已经解决了这个问题,并允许在已签名的请求的基础上覆盖每个请求的标头:
http://docs.amazonwebservices.com/AmazonS3/latest/API/index.html?RESTObjectGET.html
w00t!
小智 10
到目前为止已经提到的PHP脚本可以正常工作,但主要的缺点是每次站点上的访问者请求文件时,您自己的服务器将从S3加载它然后将该数据中继到浏览器.对于低流量站点,它可能不是什么大问题,但对于高流量站点,您肯定希望避免通过自己的服务器运行所有内容.
幸运的是,有一种相当直接的方法可以将文件设置为强制从S3下载.你完全正确 - 你只想设置内容类型和内容处理(只是设置内容处理在某些浏览器中可以使用,但设置两者都适用于所有浏览器).
此代码假设您使用的是Undesigned中的Amazon S3 PHP类:
<?php
// set S3 auth and get your bucket listing
// then loop through the bucket and copy each file over itself, replacing the "request headers":
S3::copyObject($bucketName, $filename, $bucketName, $filename, "public-read", array(), array("Content-Type" => "application/octet-stream", "Content-Disposition" => "attachment"));
?>
Run Code Online (Sandbox Code Playgroud)
现在,您的所有文件都将被强制下载.您可能需要清除缓存以查看更改.显然,不要在您确实希望在浏览器中"内联"加载的任何文件上执行此操作.
这个解决方案很好的部分是直接加载媒体文件的应用程序(比如让我们说Flash中的mp3播放器)不关心内容类型或内容处理,所以你仍然可以在浏览器中播放你的文件然后链接下载相同的文件.如果用户已经完成了在闪存中加载文件,他们很可能仍然会在缓存中使用它,这意味着他们的下载速度非常快,甚至不会从S3中收取额外的带宽费用.