Paperclip S3 - 可以上传图像但无法查看它们

Posted

技术标签:

【中文标题】Paperclip S3 - 可以上传图像但无法查看它们【英文标题】:Paperclip S3 - Can upload images but cannot view them 【发布时间】:2012-08-08 09:03:53 【问题描述】:

我使用 Paperclip 和 S3 创建了一个在 Heroku 上运行的 Rails 应用程序。我已经设法通过该网站将图像上传到我的 S3 存储桶(我可以在亚马逊控制面板上的存储桶中看到它们)。

但是当我添加一个图像标签,即 时,我得到了以下 html(这里省略了标签),没有显示图像!

img src="http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg?1344661020"

请帮忙!为什么我看不到图片,即使它们在存储桶中?

非常感谢大家

【问题讨论】:

检查my answer 【参考方案1】:

创建一个名为回形针初始化器的文件:

# config/initializers/paperclip.rb 
# We are actually setting this to 's3_domain_url', 
# so it's not a placeholder for something else. 
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'

或者你也可以把它放在production.rb:

config.paperclip_defaults = 
    :storage => :s3,
    :s3_credentials => 
        :bucket => ENV['S3_BUCKET_NAME'],
        :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    ,
    :url =>':s3_domain_url',
    :path => '/:class/:attachment/:id_partition/:style/:filename',

【讨论】:

我认为这意味着我应该将我的 s3 域作为 :url 键的值放入。一个小时的调试后,我看到回形针是疯了,专门为那个键寻找值“:s3_domain_url”。当心! 感谢@awesome_person,我刚刚发表了评论以说明这一点。 您可以将来自@awesome_person 的信息作为评论添加到url 行吗?【参考方案2】:

首先,您尝试在代码中使用的网址是这样的:

http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg

当您在浏览器中访问该链接时,您会看到以下内容:

<message>
  The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
</Message>
<RequestId>810A6AE1D141304C</RequestId>
<Bucket>hiphotos</Bucket>
<HostId>
  XXZ+s+slgZLsRWy5NiU/G0yAKBLftw0oT2dDKpas532qXJEPSrISVPqfZsEgpb2J
</HostId>
<Endpoint>hiphotos.s3.amazonaws.com</Endpoint>

因此,如果我们使用正确的端点修改 url,我们会得到:

http://hiphotos.s3.amazonaws.com/ads/photos/000/000/015/original/test_tree.jpg

返回正确的图像。

如果您使用的是欧洲存储桶,则可能会发生这种情况,这可能是您用来将内容推送到 s3 的 gem 的错误。

有很多文章介绍了如何让 Paperclip、S3 和欧洲水桶很好地协同工作。

但我发现,自从我开始使用 asset_sync gem(它使用 Fog 而不是 aws-s3 gem)后,我在使用回形针和 S3 时不再有任何问题。

所以我怀疑 Fog 与我解决这个问题有关。如果您正在使用其他东西,我建议您切换到它。

【讨论】:

你,我的朋友,是一个美丽的人 :) 花了两天时间解决这个问题 - 你的建议解决了它。必须将其添加到我的模型中: :url => ":s3_domain_url", :path => (无论如何......如果没有错误,需要包含在 url 中)非常感谢! 很好地重述了问题。

以上是关于Paperclip S3 - 可以上传图像但无法查看它们的主要内容,如果未能解决你的问题,请参考以下文章

如何显示来自 S3/Paperclip/Heroku 的图像?

Rails:Amazon S3 + Paperclip 不在数据库中存储任何内容?

添加了图像上传进度条(Paperclip、Javascript),但图像本身没有被保存。我怎样才能解决这个问题?

Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?

如何使用Paperclip在Rails 4中上传多个图像

回形针 未经许可的参数:图像