Xtr*_*eme 8 php amazon-s3 amazon-web-services
我在Amazon S3上有我的照片.这些图片是私密的而不是公开的,因此我无法通过直接链接显示它们s3.amazonaws/bucket_name/key_name/image_name.jpg
我知道Amazon S3上的图像名称.如何在我的网站上用PHP显示Amazon S3图像flower.png和house.png?
如果您不想公开您的文件,请执行以下步骤.
确保您的S3存储桶是私有的.只有经过身份验证和授权的调用才能获取您的对象
在服务器端,在呈现页面时,生成包含签名的S3对象的链接.签名将根据您的访问和密钥计算,并告知S3必须授权该呼叫
S3签名URL很容易从我们的SDK生成.对于PHP,只需查看http://docs.aws.amazon.com/aws-sdk-php/guide/latest/service-s3.html#creating-a-pre-signed-url上的文档.
对于需要使用AWS开发工具包v3进行此行为的用户,如果您直接使用“ +10分钟”作为第三个参数调用getObjectUrl,它将始终返回纯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();
Run Code Online (Sandbox Code Playgroud)
参考:https : //docs.aws.amazon.com/aws-sdk-php/v3/guide/service/s3-presigned-url.html
最简单的方法就是在 s3 中公开它们,至少是只读的。
如果您不希望它们在 s3 上公开,无论出于何种原因,您可以添加一个 cloudfront 发行版,该发行版将为您的 s3 存储桶中的图像提供服务,并且您可以向 cloudfront 授予对文件的访问权限,而无需在 s3 中公开图像。
此链接向您展示了如何执行此操作:
| 归档时间: |
|
| 查看次数: |
16169 次 |
| 最近记录: |