rails aws3图片上传

本文使用rails + paperclip + aws-sdk3 的简单图片上传

  1. 安装依赖
    paperclip这个gem依赖于ImageMagick
    Mac
    brew install imagemagick
    Linux
    sudo apt-get install imagemagick -y
    手动安装
    可以到ImageMagick的官方下载安装包 or 编译包进行手动安装

  2. 安装gem

  • paperclip
    使用gem install paperclip,默认安装最新,如果需要指定版本请在后面加上-v 版本号
    或者在Gemfile文件加上gem "paperclip",再执行bundle
  • S3
    gem install aws-sdk or Gemfile添加gem 'aws-sdk'之后bundle
  1. rails保存图片
    ok,我们的准备工作已经完成,接下来让我们写图片保存的核心
    图片信息需要挂在一个model上
    rails g model user
    ok,然后就是保存图片的信息字段
    rails g paperclip user avatar
    它会在db的迁移文件中生成这几个字段
class AddAvatarColumnsToUsers < ActiveRecord::Migration
  def up
    add_attachment :users, :avatar
    # === 生成的 db column ===
    # avatar_file_name
    # avatar_file_size
    # avatar_content_type
    # avatar_updated_at
  end

  def down
    remove_attachment :users, :avatar
  end
end

执行迁移rake db:migrate
db完成之后,接下来就是在model层做好s3的配置

has_attached_file :avatar,
                    :storage => :s3,
                    :s3_credentials => Proc.new{|a| a.instance.s3_credentials }

# your s3 config
def s3_credentials
  {
    :bucket => "xxx", 
    :access_key_id => "xxx", 
    :secret_access_key => "xxx", 
    :s3_region => "us-east-1"
  }
end

配置完成之后,就开始测试是否能上传吧
准备我们的文件上传view

<% form_for :user, :html => { :multipart => true } do |form| %>  
  <%= form.file_field :avatar %>  
<% end %> 

接下来需要创建controller来接收我们的文件

@user = User.create params[:user]

如果没有什么差错的话,我们保存成功之后图片就到aws上了。

参考

github paperclip
paperclip s3 doc
github aws-sdk

你可能感兴趣的:(rails aws3图片上传)