使用AWS CloudFront和PHP进行简单的图像交付


Simple image delivery with AWS CloudFront and PHP?

我刚开始尝试使用Amazon S3和CloudFront,并成功地在CloudFront上创建了S3 Bucket和Distribution。

我的目的是使用CloudFront从边缘位置进行简单的图像/css交付-所以我正在寻找最基本的AWS功能。

我在S3桶中上传了一些图像,当我试图访问相同的测试目的与http://xxx.cloudfront.net/image.jpg我得到以下错误:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>ABCD1234</RequestId>
    <HostId>
        xxxxx
    </HostId>
</Error>

我猜在我开始传递内容之前我需要验证自己?我已经抓住了AWS-PHP SDK,但随后我就不知所措了。AWS文档中提供的所有示例都是针对更复杂的功能…对于简单的图像传递,似乎没有一个直接的代码示例。

这里有人之前设置过这个吗?你是怎么做的?

我的网站是用PHP写的。

任何帮助都将非常感激。

谢谢,
m ^ e

更新

AWS文档页面中关于基本链接的部分说我可以以http://xxx.cloudfront.net/image.jpg格式访问我上传的资源。

但是,当我这样做时,我得到了Access Denied XML dump。

所以我回到S3存储桶,右键单击图像并单击Open。它以以下链接格式弹出图片:
http://xxx.cloudfront.net/1st -开-家- 1月- 2011. - jpg?awsaccesskeyid=yyy

每当我尝试轮询我的图像在这种格式(包括AccessKey),它似乎工作。如果URL中没有AccessKey,则没有。

这是否意味着,我必须在整个网站的每个图像请求中包含访问键?或者是否有其他方法在单点预验证请求,然后继续正常加载图像,减去url中的访问键?

为什么不让你的图片公开呢?我能想象你想保护视频或音频的隐私,但图像呢?反正他们是可以被抓的,所以为什么要保护他们呢?只需将权限Everyone设置为Read,问题就解决了。

我希望这有帮助?

啊哈,我想我知道这个,主要是因为我自己一直在研究它。

这个问题在以下两个关于stackoverflow的问题中得到了回答。

如何使用php和amazon s3 sdk下载文件在amazon s3上强制下载php

这与在调用中设置Content-Type和Content-Disposition有关。但是正如John R提到的,对于图像,css和js,我个人会把它们设为public