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

Posted

技术标签:

【中文标题】Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?【英文标题】:Paperclip does not show image but instead shows title with amazon s3 in rails? 【发布时间】:2020-01-10 22:40:11 【问题描述】:

我正在使用回形针和 amazon s3 为我的网站存储图像。在开发模式下,如果没有 s3,一切都可以正常工作,但是当我尝试使用 s3 时,它会显示图像的标题而不是图像。我已经复制了 heroku 指南 https://devcenter.heroku.com/articles/paperclip-s3 中的内容。

这是宝石文件

gem 'paperclip'
gem 'aws-sdk', '~> 2.3'

这是在类配置文件的 profile.rb 中

has_attached_file :avatar,
                       :styles =>  :medium => "300x300>", :thumb => "100x100>" ,
                       :default_url => ":style/missing.jpg"
    validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/

这是在生产中.rb

config.paperclip_defaults = 
    storage: :s3,
    s3_host_name: "s3-#ENV['AWS_REGION'].amazonaws.com",
    :s3_protocol => :https,
    s3_credentials: 
      bucket: ENV.fetch('S3_BUCKET_NAME'),
      access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
      secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
      s3_region: ENV.fetch('AWS_REGION'),
    
  

观看次数

<%= image_tag @user.profile.avatar.url(:medium) %>  

我已经复制了 heroku 指南并添加了主机名和 s3 协议位。这里有什么问题?

【问题讨论】:

【参考方案1】:

我已遵循 heroku 指南,并成功地在开发环境中使用回形针将用户图像上传到 S3,并且我还可以在用户个人资料中看到该图像。

我的Gemfile

gem 'paperclip'
gem 'aws-sdk-s3'

我的development.rb

config.paperclip_defaults = 
storage: :s3,
s3_host_name: "s3.#ENV['AWS_REGION'].amazonaws.com",
s3_protocol: :https,
s3_credentials: 
    bucket: ENV.fetch('S3_BUCKET_NAME'),
    access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
    secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
    s3_region: ENV.fetch('AWS_REGION'),
  

你有这个(这可能会导致问题):

s3_host_name: "s3-#ENV['AWS_REGION'].amazonaws.com",

我有这个(s3 后面的一个点):

s3_host_name: "s3.#ENV['AWS_REGION'].amazonaws.com",

我的user.rb和你的一样

has_attached_file :avatar,
                       :styles =>  :medium => "300x300>", :thumb => "100x100>" ,
                       :default_url => ":style/missing.jpg"

# Validate the attached image is image/jpg, image/png, etc
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/

我的show.html.erb

<%= image_tag @user.avatar.url(:medium) %>

我使用的是 rails 5.2 版本,上面的代码对我有用。还要检查您的 S3 存储桶是否可以公开访问对象。

【讨论】:

嗨,当我执行您所做的操作时,它显示 LoadError(无法加载此类文件 - aws-sdk(您可能需要安装 aws-sdk gem)):这就是我更改 gem 的原因回到 gem 'aws-sdk', '~> 2.3' 但它显示了同样的错误并且图片没有显示但标题显示了。感谢您的帮助! 另外,当我检查我的存储桶时,图像就在那里! 我公开了所有内容,现在可以了。但是公开它有危险吗? 公开您的 S3 存储桶以进行写入、更新和删除是很危险的。您也可以仅通过编程模式限制对存储桶的写入访问(拥有密钥对的人只能修改。这是通过 IAM 策略实现的)。对于读取操作,这取决于您是否要保护您的图像/数据不被公众访问。有多种方法可以保护您的 s3 资源。看看这个链接aws.amazon.com/premiumsupport/knowledge-center/…

以上是关于Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Paperclip + Rails 与负载平衡机器

ruby 使用Paperclip自定义处理器在Rails中模糊图像

如何在 Rails 中使用 Paperclip 将文件系统中的图像添加到模型中?

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