我有一个S3帐户来存储所有图像。
mysite.s3.amazonaws.com/imagename.JPG
这个网址是秘密的,我上传受限制的用户。我必须为此秘密图像创建下载URL。此下载网址仅供上传用户使用。
如何在php中编写代码以安全地下载图像文件。
可能是网址:mysite.com/restrictedimage.php?mid=xyztokens234
答案 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;
?>