下载存储在Amazon S3 php脚本中的图像

时间:2013-03-30 11:36:39

标签: php

我有一个S3帐户来存储所有图像。

mysite.s3.amazonaws.com/imagename.JPG

这个网址是秘密的,我上传受限制的用户。我必须为此秘密图像创建下载URL。此下载网址仅供上传用户使用。

如何在php中编写代码以安全地下载图像文件。

可能是网址:mysite.com/restrictedimage.php?mid=xyztokens234

2 个答案:

答案 0 :(得分:1)

您可以设计一个简单的数据库表(或配置文件)来记录令牌和受保护的URL之间的相关性,然后在您的restrictedimage.php脚本中,您只需检查令牌并将用户重定向到实际链接。

相反,如果您希望对自己的网址保密,则应定期下载并缓存服务器中的图片并直接输出图像,而不是重定向。

选项1的示例代码:

$token = isSet($_GET['mid'])?$_GET['mid']:null;
if(!$token) die("No token");
$realURL = retrieveUrlFromToken($token);
if(!$realURL) die("Invalid token");
header("Location: http://mysite.s3.amazonaws.com/" . $realURL); 

选项2的示例代码:

$token = isSet($_GET['mid'])?$_GET['mid']:null;
if(!$token) die("No token");
$realURL = retrieveUrlFromToken($token);
if(!$realURL) die("Invalid token");
$file = file_get_contents("http://mysite.s3.amazonaws.com/".$realURL);
header("Content-Type: application/force-download");
header("Content-Length: " . strlen($file));
header("Content-Transfer-Encoding: binary");
echo $file;

请注意retrieveUrlFromToken可能只是一个身份函数,如果你不想隐藏真实路径,但我建议你做一些更好的事情,否则整个脚本都没用。

答案 1 :(得分:0)

使用此代码下载图像文件

<a href="download.php?filename='imagename.JPG'>Download</a>

Download.php

<?php

    $filename ="http://mysite.s3.amazonaws.com/" . $_GET["filename"];
    $buffer = file_get_contents($filename);
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/octet-stream");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . strlen($buffer));
    header("Content-Disposition: attachment; filename=$filename");
    echo $buffer; 
?>