如何通过Zend_Service_Amazon_S3访问Amazon s3私有桶对象?

3

我在亚马逊S3上创建了一个存储桶,并将一些图片放在文件夹中。所有图片都是私有的,我正在使用Zend的Zend_Service_Amazon_S3类。

我如何访问这些私有图片?


你是想将图像文件内容下载到一个 PHP 变量中,还是想生成一次性访问令牌以便可以访问这些图片? - bardiir
嗨,我想访问它并在网页上显示。 - Pravin Prasad
通过您的代码,即脚本从图像获取二进制内容,然后将图像内容回显到浏览器中,如果这样,与使用自己的服务器相比,使用亚马逊作为存储的好处在哪里?或者通过某种访问令牌,如果是这样,您是否考虑过客户端可能会缓存HTML但不缓存图像,并且可能会在以后的某个时间发现您的页面已损坏,因为图像URL不再有效? - bardiir
好的,但是你能否发送给我一个代码,演示如何访问私有对象并使用Zend_Service_Amazon_S3类进行显示。 - Pravin Prasad
2个回答

6
你可以通过创建私有URL来完成此任务,就像这样。
public function get_s3_signed_url($bucket, $resource, $AWS_S3_KEY, $AWS_s3_secret_key, $expire_seconds) {
     $expires = time()+$expire_seconds;
     // S3 Signed URL creation
     $string_to_sign = "GET\n\n\n{$expires}\n/".str_replace(".s3.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 = "http://s3.amazonAWS.com/{$bucket}/{$resource}?{$authentication_params}";
}

现在使用这个网址来获取访问权限。

以上函数中的资源是什么? - Ankush Gautam
已经过时了,请使用官方SDK:https://docs.aws.amazon.com/de_de/sdk-for-php/v3/developer-guide/s3-presigned-url.html - Ron

2
尝试一下这个: 它将返回存储在亚马逊 S3 存储桶上的文件的二进制数据。
require_once 'Zend/Service/Amazon/S3.php';
$s3 = new Zend_Service_Amazon_S3($my_aws_key, $my_aws_secret_key);
echo $s3->getObject("my-own-bucket/myobject");

文档在这里:http://framework.zend.com/manual/de/zend.service.amazon.s3.html
这是示例#1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接