Php 如何在我的网站上显示来自Amazon S3的图像?
我在Amazon S3上有我的照片。这些图片是私有的,不是公共的,所以我不能用直接链接Php 如何在我的网站上显示来自Amazon S3的图像?,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,我在Amazon S3上有我的照片。这些图片是私有的,不是公共的,所以我不能用直接链接s3.amazonaws/bucket\u name/key\u name/image\u name.jpg 我知道AmazonS3上的图像名称。例如,如何使用PHP在我的网站上显示Amazon S3图像flower.png和house.png?最简单的方法是在S3中公开它们,至少是只读的 如果您不想让它们在s3上公开,无论出于何种原因,您都可以添加一个cloudfront发行版,为s3存储桶中的图像提供服务,
s3.amazonaws/bucket\u name/key\u name/image\u name.jpg
我知道AmazonS3上的图像名称。例如,如何使用PHP在我的网站上显示Amazon S3图像flower.png和house.png?最简单的方法是在S3中公开它们,至少是只读的 如果您不想让它们在s3上公开,无论出于何种原因,您都可以添加一个cloudfront发行版,为s3存储桶中的图像提供服务,并且您可以让cloudfront访问这些文件,而无需在s3中公开这些图像 此链接向您展示了如何执行此操作:
如果您不想公开您的文件,以下是过程
对于那些需要在AWS SDK v3中使用此行为的用户,如果直接调用getObjectUrl并将“+10分钟”作为第三个参数,则它将始终返回普通URL。那是因为方法改变了。要获取预签名链接,请执行以下操作:
//Get an instance of S3 Client. This is one one to do it:
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'us-west-2', //Region of the bucket
'credentials' => array(
'key' => 'YOUR-ACCOUNT-KEY',
'secret' => 'YOUR-ACCOUNT-SECRET',
)
]);
//Get a command to GetObject
$cmd = $s3Client->getCommand('GetObject', [
'Bucket' => 'YOUR-BUCKET-NAME',
'Key' => 'YOUR-FILE-KEY'
]);
//The period of availability
$request = $s3Client->createPresignedRequest($cmd, '+10 minutes');
//Get the pre-signed URL
$signedUrl = (string) $request->getUri();
Ref:使用AmazonAPI网关创建RESTAPI,并使用必要的用户权限调用lambda函数,以访问私有s3存储桶中的数据。
使用以下代码发送base64响应。
这可以直接用作HTML中图像标记的源
const AWS = require('aws-sdk');
//*/ get reference to S3 client
var s3 = new AWS.S3();
exports.handler = (event, context, callback) => {
var params = {
"Bucket": "bucket-name",
"Key": "object-name"
};
s3.getObject(params, function(err, data){
if(err) {
callback(err, null);
} else {
let image = new Buffer(data.Body).toString('base64');
image = "data:"+data.ContentType+";base64,"+image;
let response = {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*",
'Content-Type': data.ContentType
},
"body":image,
"isBase64Encoded": true
};
callback(null, response);
}
});
};
通过公开图片。是否需要公开图片才能在我的网页上查看?我更愿意让他们在亚马逊上保持隐私。我想我可以通过我的私钥联系到他们。原因是我不想让他们在S3上公开。图片由用户上传到我的网站上。图像不应通过搜索引擎或任何其他方式找到。只有经过授权的用户才能通过我的网站查看选定的图像。要在Google App Engine中使用PHP访问Google云存储文件,我使用以下命令:gs://bucket\u name/desired\u object\u name。这很容易,你链接到的东西并不容易。您是否有使用PHP访问AmazonS3中私有文件的更简单方法的链接?类似于$s3->getPrivateLink('myfile.jpg',+10);哪个返回临时链接?当然,看一行代码就足够了$signedUrl=$client->getObjectUrl($bucket,'data.txt','+10分钟');非常感谢。如果有人在寻找这方面的python代码-