通过cloudfront分发上传文件

时间:2014-06-03 11:57:45

标签: amazon-web-services amazon-s3 cors amazon-cloudfront

如何将文件直接上传到Cloudfront发行版?

现在我在javascript sdk的s3类中使用了putobject方法

根据文档,我们可以直接上传到发行版 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AddingObjects.html

当我将put请求发送到distributionname.cloudfront.net它说403禁止 虽然我在s3中启用了CORS配置

是否有与s3.putobject相似的方法直接上传到云端?

或者我应该继续发送到s3的发行地来源buketname.s3.amazonaws.com /?

4 个答案:

答案 0 :(得分:2)

实际上AWS后来发布了一个名为的功能 "亚马逊S3传输加速" Transfer Acceleration利用Amazon CloudFront的全球分布式边缘位置

http://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html

答案 1 :(得分:1)

据我了解,如果您在存储桶上使用传输加速,则上传到该存储桶的对象将首先上传到CloudFront,然后将传输到实际的S3存储桶。

答案 2 :(得分:0)

没有将文件“上传”到Cloudfront这样的概念。

您引用的链接仅讨论了将对象添加到来源 - 而不是发布,尽管亚马逊文档中的标题含糊不清。正如在那里讨论的那样,你要在你的原点上添加对象,以便它们可以通过你的发行版进行访问......而不是实际上将这些对象添加到发行版中。

Cloudfront不提供持久存储 - 它只在从源(可以是S3,或者不是S3)获取对象之后,存储(缓存)通过它请求的对象。

一旦在Cloudfront边缘位置请求并缓存了一个对象,它仍然不是真正意义上的“在Cloudfront中”。它仅存储在请求它的特定边缘位置,并且只有在它到期或者从该位置的Cloudfront缓存中被驱逐之前。

  

[...]当边缘位置需要空间时,Amazon CloudFront将删除不太受欢迎的对象,以便为更受欢迎的对象腾出空间。这意味着不经常访问的静态对象不太可能保留在Amazon CloudFront的边缘位置缓存中。

     

- https://aws.amazon.com/cloudfront/details/

现在,所有这些都说... it is technically possible将对象上传到S3 Cloudfront,但这种技术并没有将对象“放入”Cloudfront ......它只允许您使用Cloudfront作为代理将对象放入S3,这可以在不太理想的网络条件下提供一些性能改进,但在获取对象时不会影响Cloudfront的后续行为,并且不会使对象无效可能已在全球各个边缘位置的Cloudfront中缓存的对象的旧副本。

答案 3 :(得分:0)

如果您启用这些请求,Cloud Front 可以支持这些请求:POST、PUT、DELETE、OPTIONS 和 PATCH。

Aws 建议使用 CloudFront 上传/下载小于 1Gb 的文件。对于较大的文件,建议使用 S3 Transfer Accelerator。

见:https://aws.amazon.com/blogs/aws/amazon-cloudfront-content-uploads-post-put-other-methods/

https://aws.amazon.com/s3/faqs/#Amazon_S3_Transfer_Acceleration