我有一個S3帳戶來存儲所有圖像。下載存儲在Amazon S3中的圖像php腳本
mysite.s3.amazonaws.com/imagename.JPG
此URL是祕密的,我上傳受限用戶。我必須爲這個祕密圖像創建下載URL。此下載網址只適用於上傳的用戶。
如何在PHP中編寫代碼以安全地下載圖像文件。
可能網址看起來像:mysite.com/restrictedimage.php?mid=xyztokens234
我有一個S3帳戶來存儲所有圖像。下載存儲在Amazon S3中的圖像php腳本
mysite.s3.amazonaws.com/imagename.JPG
此URL是祕密的,我上傳受限用戶。我必須爲這個祕密圖像創建下載URL。此下載網址只適用於上傳的用戶。
如何在PHP中編寫代碼以安全地下載圖像文件。
可能網址看起來像:mysite.com/restrictedimage.php?mid=xyztokens234
你可以設計一個簡單的數據庫表(或配置文件),它記錄了令牌和受保護的URL之間的相關性,然後在您的restrictedimage.php腳本中,您只需檢查令牌並將用戶重定向到實際的鏈接。
取而代之的是,如果你想讓你的祕密保持你的URL,你應該定期下載和緩存你的服務器中的圖像,並直接輸出圖像,而不是重定向。
$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
示例代碼路徑,但我建議你做更好的事情,否則整個腳本是沒用的。
謝謝,我明白了,這段代碼不會無用:D – SSK
使用此代碼下載圖像文件
<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;
?>
你的努力在哪裏?或者你沒有嘗試自己做這個? –