【发布时间】:2011-08-25 14:26:41
【问题描述】:
我一直在开发一个新的 Web 应用程序,它依赖于 Amazon S3 服务器作为存储系统,Codeiginter 作为 PHP 框架。
点击链接时我需要强制下载文件。原始 URL 如下所示:
http://www.our-web.com/download/do/1.jpg
它会为 Amazon S3 服务器上的实际文件生成一个临时签名 URL,如下所示:
http://main_bucket.s3.amazonaws.com/post/1/1.jpg?AWSAccessKeyId=AKIAJEOQKYPKC3CCU5RA&Expires=1305395426&Signature=iuzCdA22gImLK192%2BMAhk8OkAY8%3D
我需要在用户点击链接后立即从真实的亚马逊 URL 开始下载文件。
我现在有两种方法:
- 使用
redirect()打开文件不下载;或 -
将标题更改为以下代码:
header('Content-type: application/force-download'); header('Content-Disposition: attachment; filename=' . $file_name); header('Content-Transfer-Encoding: binary'); header('Expires: 4000'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($generated_file)); readfile($generated_file);
不幸的是,这两种方式都对我没有帮助。第二种方法导致下载来自我的网站,而不是直接来自亚马逊。
如何强制文件直接从 Amazon S3 服务器下载,而不是从我的网站下载?
【问题讨论】:
-
使用 file_get_contents 或 cURL 检索 S3 文件,然后使用标头进行直通
-
这就是他对
readfile所做的。 -
正确,但即使我不希望客户端通过我的网站下载文件。从另一个域下载必须有更好的解决方案。
-
如果您尝试利用 cloudfront,则通过您的站点拉取文件是一个糟糕的主意,这可能会将您的内容分发到多达 19 个边缘节点。
标签: php codeigniter download amazon-s3