1.添加gem
gem 'carrierwave', '0.6.2'
gem 'mini_magick' #不使用rmagick,占内存
如果之前没安装magickimage 就运行sudo apt-get install imagemagick
magickimage主要功能是切割图片2.bundle install
3.为users表添加一个avatar字段,也可以为其他名称,注意相应的代码修改,如果users表本身有一个字段保存图片的路径,可不新加avatar字段
rails g migration add_avatar_to_users avatar:string rake db:migrate
4.生成Avatar,跟你添加的字段相同
rails generate uploader Avatar #将会生成文件app/uploaders/avatar_uploader.rb
5.为user的model user.rb添加如下代码,使表之间关联
mount_uploader :avatar, AvatarUploader
6.接下来进行修改app/uploaders/avatar_uploader.rb,下面是一个例子
# encoding: utf-8
class
AvatarUploader
< CarrierWave::Uploader::Baseinclude CarrierWave::MiniMagick #使用minimagick处理压缩图片,确保安装magickimage这个东东,ubuntu可以sudo apt-get install magickimage
# Choose what kind of storage to use for this uploader:
storage :file
# storage :fog# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir #定义上传到哪个文件夹下
"#{Rails.root}/public/site_data/#{model.site_id}"
enddef filename #图片保存的名字 这里已解决上存相同名字图片覆盖问题
"#{secure_token}.#{file.extension}" if original_filename.present?
end
def default_url #可以定义默认图片,如过用户没有上传图片,则可以使用默认的图片
"/sfile/default4.jpg"
end#图片的处理,有不同版本大小,网站可以在不同的地方调用不同的图片大小
version :photo_big do
process :resize_to_fit => [480,nil] #fit是先规定图片的长或宽,再等比例缩放没规定的长或宽
endversion :photo_small do
process :resize_to_fill => [180,100] #fill硬性规定图片的长或宽
end# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
#指定上传文件的格式
def extension_white_list
%w(jpg jpeg gif png)
endprotected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
# Override the filename of the uploaded files:
# Avoid using model.id or version_name here, see uploader/store.rb for details.
# def filename
# "something.jpg" if original_filename
# end
end
7.如何在表单中上传
<%= form_for(@user) do |f| %> <div class="field"> <%= f.file_field :avatar %> <%= f.hidden_field :avatar_cache %> </div> ... <%end%>
8.如何显示图片
<%= image_tag(@user.avatar_url(:photo_big)) if @user.avatar %>
或<img src="<%= @user.avatar_url(:photo_big) -%>" >