我只是(或沒有),試圖從我的亞馬遜桶強制JPG下載,就像這樣:力Amazon S3的JPG下載 - 附件頭URL
function get_s3_signed_url($bucket, $resource, $AWS_S3_KEY, $AWS_s3_secret_key, $expire_seconds) {
$expires = time()+$expire_seconds;
$string_to_sign = "GET\n\n\n{$expires}\n/".str_replace(".s3-eu-west-1.amazonAWS.com","", $bucket)."/$resource";
$signature = urlencode(base64_encode((hash_hmac("sha1", utf8_encode($string_to_sign), $AWS_s3_secret_key, TRUE))));
$authentication_params = "AWSAccessKeyId=".$AWS_S3_KEY;
$authentication_params.= "&Expires={$expires}";
$authentication_params.= "&Signature={$signature}";
return $link = "https://s3-eu-west-1.amazonAWS.com/{$bucket}/{$resource}?{$authentication_params}";
}
$url = get_s3_signed_url($aws_bucketName, 'website-hires-photos/photo/'.$filename, $aws_access_key_id, $aws_s3_secret, 30);
header('Content-Type: images/jpg');
header("Content-Transfer-Encoding: Binary");
header('Content-Description: File Transfer');
header("Content-disposition: attachment; filename=\"".$url."\"");
readfile($url);
但是我卻越來越行話的負載像這樣:
zóPcg」
îZ~ØsÍêïJ#£Aq$ÓÒ†Nkèk�Á+bÊ˛«∏k.≠ªÄ‡K©˜‰˚FπæÜ
v§>†˘π#kGGº〜{ÖlüûË¢û±S_π̧àFI [ÔFL€≤˛«/ P {SS「Ì∫} _˚k'˝cg˙UF-O [2KK \OÉá∂¥'_PÓı`oà˘N‰I - ‘Ûzöw4Πí X©ì©’∫-OE£UA〜¸~ŸÓk£√¯Ö•愛華「ÀÈΔäüÓ≠÷9º-CΣ=üÿY 〜A ^€
這似乎是一個相當有趣的閱讀,但我沒有時間坐下來閱讀。現在,該文件「種」下載,它說這是748KB的大小,這是此照片的正確尺寸。但是,文件類型是未知的,我的機器,所以我在文本編輯器打開它,它給上面的垃圾。
請告訴我,我做錯了什麼。在這一點之前或之後,我沒有迴應屏幕上的任何內容。在頂部有兩個包含請求,這個函數以及頭文件和readfile函數。
修復更新:
這一切都是因爲前簽署AWS S3環節都有適當 .JPG擴展.JPG?AWSAccessKeyID=345wrdwf
後查詢字符串值。所以下載時,它不會識別擴展名。我得到了這一輪通過創建一個獨特的URL只爲標題,就像這樣:
$headerURL = array_shift(explode('?', basename($url)));
前,在文件名後它剝離了一切。所以我結束了這樣的事情:
$url = get_s3_signed_url($aws_bucketName, 'website-hires-photos/photo/'.$filename, $aws_access_key_id, $aws_s3_secret, 10);
$headerURL = array_shift(explode('?', basename($url)));
header("Content-Transfer-Encoding: binary");
header("Content-Type: image/jpg");
header('Content-Description: File Transfer');
header("Content-Disposition: attachment; filename=".$headerURL);
readfile($url);
它假設是什麼類型的圖像? – Musa 2012-07-29 23:19:09
@Musa:JPEG,對不起。 – TheCarver 2012-07-29 23:24:10
@PaparazzoKid應該以JFIF開頭,如果JPEG中出現亂碼的文字... – 2012-07-29 23:37:46