2013-03-30 84 views
-2

我有一個S3帳戶來存儲所有圖像。下載存儲在Amazon S3中的圖像php腳本

mysite.s3.amazonaws.com/imagename.JPG 

此URL是祕密的,我上傳受限用戶。我必須爲這個祕密圖像創建下載URL。此下載網址只適用於上傳的用戶。

如何在PHP中編寫代碼以安全地下載圖像文件。

可能網址看起來像:mysite.com/restrictedimage.php?mid=xyztokens234

+0

你的努力在哪裏?或者你沒有嘗試自己做這個? –

回答

1

你可以設計一個簡單的數據庫表(或配置文件),它記錄了令牌和受保護的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

示例代碼路徑,但我建議你做更好的事情,否則整個腳本是沒用的。

+0

謝謝,我明白了,這段代碼不會無用:D – SSK

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; 
?>