目前已经提到的php脚本可以正常工作,但主要的缺点是,每当您的站点上的访问者请求一个文件时,您自己的服务器将从S3加载它,然后将该数据中继到浏览器.对于低流量网站,这可能不是什么大问题,但对于高流量网站,您绝对希望避免通过自己的服务器运行一切.
幸运的是,有一个相当直接的方法来设置您的文件被迫从S3下载.而且你是完全正确的 – 你只是想设置内容类型和内容 – 处置(只是设置内容 – 配置可以在一些浏览器中工作,但设置都应该在所有浏览器中工作).
这段代码假设您正在使用Undesigned中的Amazon S3 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"));
?>
现在所有的文件都将被迫下载.您可能需要清除缓存以查看更改.显然,不要在浏览器中实际想要加载的“内联”文件上执行.
这个解决方案的最好的部分是直接加载媒体文件的应用程序(比如说Flash中的mp3播放器)并不在意内容类型或内容配置,所以您仍然可以在浏览器中播放文件链接下载同一个文件.如果用户已经完成了将文件加载到闪存中,他们很有可能仍然在缓存中,这意味着他们的下载速度将非常快,甚至不会为您带来任何额外的带宽费用.