本文使用rails + paperclip + aws-sdk3 的簡單圖片上傳
安裝依賴
paperclip這個gem依賴于ImageMagick
Mac
brew install imagemagick
Linux
sudo apt-get install imagemagick -y
手動安裝
可以到ImageMagick的官方下載安裝包 or 編譯包進行手動安裝安裝gem
- paperclip
使用gem install paperclip
溯壶,默認安裝最新抢韭,如果需要指定版本請在后面加上-v 版本號
或者在Gemfile文件加上gem "paperclip"
佳吞,再執(zhí)行bundle
- S3
gem install aws-sdk
or Gemfile添加gem 'aws-sdk'
之后bundle
- rails保存圖片
ok,我們的準備工作已經(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
配置完成之后髓堪,就開始測試是否能上傳吧
準備我們的文件上傳view
<% form_for :user, :html => { :multipart => true } do |form| %>
<%= form.file_field :avatar %>
<% end %>
接下來需要創(chuàng)建controller來接收我們的文件
@user = User.create params[:user]
如果沒有什么差錯的話,我們保存成功之后圖片就到aws上了搞坝。