rails aws3圖片上傳

本文使用rails + paperclip + aws-sdk3 的簡單圖片上傳

  1. 安裝依賴
    paperclip這個gem依賴于ImageMagick
    Mac
    brew install imagemagick
    Linux
    sudo apt-get install imagemagick -y
    手動安裝
    可以到ImageMagick的官方下載安裝包 or 編譯包進(jìn)行手動安裝

  2. 安裝gem

  • paperclip
    使用gem install paperclip,默認(rèn)安裝最新,如果需要指定版本請在后面加上-v 版本號
    或者在Gemfile文件加上gem "paperclip",再執(zhí)行bundle
  • S3
    gem install aws-sdk or Gemfile添加gem 'aws-sdk'之后bundle
  1. rails保存圖片
    ok,我們的準(zhǔn)備工作已經(jīng)完成,接下來讓我們寫圖片保存的核心
    圖片信息需要掛在一個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

執(zhí)行遷移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

配置完成之后,就開始測試是否能上傳吧
準(zhǔn)備我們的文件上傳view

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

接下來需要創(chuàng)建controller來接收我們的文件

@user = User.create params[:user]

如果沒有什么差錯的話,我們保存成功之后圖片就到aws上了。

參考

github paperclip
paperclip s3 doc
github aws-sdk

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容