如何将S3中的大文件链接到CakePHP 2.x请求?

时间:2014-04-28 13:53:51

标签: php cakephp amazon-s3

无需下载,也无需在请求正文中发送数据。有没有办法如何通过"流式传输它?目前我受到PHP分配的内存的限制,因为我必须在发送之前将整个文件的内容保存在内存中...

我正在为Apple iOS应用程序创建一个企业App Store(也可以安装android,但链接没问题),他们要求域与服务器相同,服务器本身太小,无法托管这么多文件...它还需要我在服务器上的有效SSL证书。

我已尝试直接链接到S3,但它不能工作,唯一的方法是从服务器提供文件,因此我一直在询问是否将文件传递/隐藏原始文件位置或我不知道,可能将S3安装为驱动器?

2 个答案:

答案 0 :(得分:3)

使用fpassthru的代理需要按照@ AD7six的建议完成,如下所示:

$handle = @fopen('file path or in this case url to file on S3', 'rb');
header('Cache-Control: no-cache, must-revalidate'); 
header('Pragma: no-cache'); //keeps ie happy
header('Content-Disposition: attachment; filename=app.ipa');
header('Content-type: application/octet-stream');
header('Content-Length: '.$fileInfo['size']); // taken from a previous S3 API call to get object info
header('Content-Transfer-Encoding: binary');

ob_end_clean(); // apparently very important for bigger files
fpassthru($handle); // proxy stream file through your server
exit();

答案 1 :(得分:0)

您是否阅读过S3的官方文档?

请参阅此答案:How to create download link for an Amazon S3 bucket's object?

无需通过服务器推送数据将其发送到客户端。如果您需要受保护的可下载项目,还可以为下载链接提供仅在给定时间内有效的令牌。