如何从rails Controller上传图像到AWS服务器

时间:2014-11-27 12:22:01

标签: mongodb ruby-on-rails-3.1 mongoid paperclip aws-sdk

请在Controller中的AWS服务器上帮助上传图像。

我想要做些事情。
  1.提交带图像的表格数据   2.在控制器中获取映像并上传到AWS服务器   3.没有为AWS上传图像的模型编码。

而不是在模型中写代码如下

has_mongoid_attached_file :avatar, { path: ':class/:id/:style/:basename.:extension', storage: :s3, bucket: bucket_name, s3_credentials: { access_key_id: 'access_key_id', secret_access_key: 'secret_access_key' }, styles: { thumb: ['90x90^', :jpg], feature: ['220x142^', :jpg], show_page: ['720x420^', :jpg], preview: ['145x90^', :jpg] } }

我想直接从控制器上传图片。

并且只保存上传图片的URL而不是下面的数据库。

"attachment_file_name": "imagename.png", "attachment_content_type": "image/png", "attachment_file_size": 1235, "attachment_updated_at": TimeStamp,

我想只存储这样的网站 avatar = https://s3.amazonaws.com/bucket_name/imagename.png

注意:我的项目位于Rails 3.1.12Ruby 1.9.3p484使用mongoid

2 个答案:

答案 0 :(得分:0)

你需要在模型中传递url选项,比如

 has_mongoid_attached_file :avatar, {
        :url            => ':s3_alias_url',
  }

答案 1 :(得分:0)

嗨朋友你的商店S3凭证模型这是错误的,你需要将s3凭证存储在单独的yml文件中。

在您的config / production.rb

# config/environments/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']
      } 
     }

撰写paperclip.rb

  config/initializers/paperclip.rb
  Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
  Paperclip::Attachment.default_options[:path]= '/:class/:attachment/:id_partition/:style/:filename'

在您的模型中需要验证图像类型

  has_attached_file :avatar, styles: {
     thumb: '100x100>',
     square: '200x200#',
     medium: '300x300>'
  }

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