我一直在开发一个新的网络应用程序,它依赖于亚马逊S3服务器作为存储系统,以及代码点火器作为 PHP 框架。
我需要在单击链接时强制下载文件。原始网址如下所示:
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
我需要在用户单击链接时立即开始从真实的 Amazon URL 下载文件。
我现在有两种方法可以做到这一点:
- Use
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 服务器下载文件,而不是从我的网站下载?
您只需在 S3 中的文件上设置正确的标头,即可强制浏览器下载而不是打开文件。设置这些:
Content-Disposition: attachment; filename=FILENAME.EXT
Content-Type: application/octet-stream
将文件上传到 S3 时,您需要设置它们。随着php SDK http://aws.amazon.com/sdkforphp/你会用create_object http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/create_object.
或者您可以在上传后设置这些'更改内容类型' http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/change_content_type or by 将文件复制到自身 http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/copy_object在 S3 中并设置正确的标头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)