如何从本地开发应用程序引用S3存储桶中的图像?

时间:2013-05-26 17:34:27

标签: ruby-on-rails amazon-web-services

请参阅:On Amazon S3 I'm able to give an individual object download rights but cannot for the entire bucket了解此问题的下一个演变。

我已经上传了所有图片。我正按照https://devcenter.heroku.com/articles/s3的指示,通过他们的网址尝试访问它们。我当然希望在将最新更改上传到我的实时应用之前确保可以访问它们。据我所知,我已经正确设置了yml,但是当我访问WEBRICK本地运行的站点时,图像没有加载。我没有对rubygems目录中的AWS文件进行任何更改。这是我用来显示图像的参考示例:

<%= image_tag("https://s3-us-west-2.amazonaws.com/mybucket/someimage.jpg") %>

有人可以向我提供一些指示吗?我知道有关于向所包含的AWS文件添加代码的说明,但是我无法理解它们并且可以进入那里并且四处闲逛。感谢。

我在存储桶政策中添加了以下内容:

{
  "Id": "somepolicy",
  "Statement": [
    {
      "Sid": "someid",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::myapp/mykey",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}

我仍然无法访问图片。 GetObject是否允许采取适当的行动?

3 个答案:

答案 0 :(得分:0)

您应该使用paperclip gem进行图片上传。我知道这似乎没有必要,但是当涉及到允许用户上传到磁盘时,最好将它留给专业人士。 (为什么重新发明轮子?)。

使用回形针,您可以执行

之类的操作
User.profile_pic.url

User.images.first.image.url

我当然认为这是要走的路。

答案 1 :(得分:0)

Paperclip是上传和提供文件的绝佳解决方案,但听起来您已经上传了您打算提供的所有内容。这是S3存储桶的权限问题。

亚马逊样本桶策略:
http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

答案 2 :(得分:0)

非常感谢与我一起解决这个问题的每个人,特别是@LarryMcKenzie。问题是您需要在上传时设置文件权限,并且无法将权限大量分配给存储桶中的所有对象。

解决方案:我重新上载了所有图像,并将Open / Download标志设置为true给所有人。