如何在我的网站上显示来自我的Amazon S3的图像?

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?

Séb*_*acq 8

如果您不想公开您的文件,请执行以下步骤.

  1. 确保您的S3存储桶是私有的.只有经过身份验证和授权的调用才能获取您的对象

  2. 在服务器端,在呈现页面时,生成包含签名的S3对象的链接.签名将根据您的访问和密钥计算,并告知S3必须授权该呼叫

S3签名URL很容易从我们的SDK生成.对于PHP,只需查看http://docs.aws.amazon.com/aws-sdk-php/guide/latest/service-s3.html#creating-a-pre-signed-url上的文档.

  1. 在网页中,当用户单击已签名的URL时,浏览器将被定向到S3.S3将验证签名,并且 - 当正确时 - 将获得该对象


Lae*_*rte 5

对于需要使用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


E.J*_*nan 2

最简单的方法就是在 s3 中公开它们,至少是只读的。

如果您不希望它们在 s3 上公开,无论出于何种原因,您可以添加一个 cloudfront 发行版,该发行版将为您的 s3 存储桶中的图像提供服务,并且您可以向 cloudfront 授予对文件的访问权限,而无需在 s3 中公开图像。

此链接向您展示了如何执行此操作:

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html

  • 我不想在 S3 上公开它们的原因。这些图片是由我的网站上的用户上传的。不应通过搜索引擎或任何其他方式找到图像。只有授权用户才能通过我的网站查看所选图像。 (7认同)