Carrierwave 的主要功能是用于上传文件或者图片的 Gem,功能非常强大。我在这里做一个非常简单的使用步骤,并不对 Carrierwave 做详细的介绍。
$ rails g uploader Photo
create app/uploaders/photo_uploader.rb
uploader 这个文件非常重要,carrierwave 许多功能都将在 photo_uploader.rb 里实现。
$ rails g migration AddPhotoToUsers photo:string
invoke active_record
create db/migrate/20120816163431_add_photo_to_users.rb
photo 字段使用与存储上传文件的地址字段。 然后在 User 的 model 中加入调用 carrierwave 的信息:
class User < ActiveRecord::Base
mount_uploader :photo, PhotoUploader
这样 Model 和数据库就可以处理好上传上来的文件了。 接下来需要处理一下 View,在正常的 new 下添加上传的按钮。
<%= form_for @user, :html => {:multipart => true} do |f| %>
<p>
<label>My Photo</label>
<%= f.file_field :photo %>
<%= f.hidden_field :photo_cache %>
</p>
<% end %>
关键在 form_for 中添加:html => {:multipart => true}
,就可以使用上传功能了。
使用只需要在需要的地方添加<%= image_tag(@user.photo_url) %>
就可以了。
这样,就完成了上传功能了。下面对上传图片的一些特别事项,做一些简单的描述。
这里需要使用到另外一个 Gem,名字为 RMagick。 如果在安装 gem 'rmagick'的过程中出现“Can't find Magick-config”的错误,以下链接就有处理这个问题的方法。 http://stackoverflow.com/questions/5201689/rmagick-gem-install-cant-find-magick-config 安装完 RMagick 后,就可以设置版本信息。 打开 class PhotoUploader,然后添加 RMagick 支持:
include CarrierWave::RMagick
include CarrierWave::MiniMagick
设置版本信息:
process :resize_to_fit => [800, 800] #图片大小不超过800*800
version :thumb do #版本名为thumb
process :resize_to_fill => [200,200] #想图片处理成200*200大小
end
<%= image_tag(@user.photo_url) %>
<%= image_tag(@user.photo_url(:thumb)) %>
也就是添加 thumb 参数就可以了,版本号为什么就添加什么。非常方便。
# 限制文件上传格式 #
添加如下代码就可以让用户只上传图片文件了。
ruby
class PhotoUploader < CarrierWave::Uploader::Base
def extension_white_list
%w(jpg jpeg gif png)
end
end
* * *
这是个非常简单的教程,也谈不上是教程,也就是说明书而已,因为在 github 上,我说写的上面的写的非常清楚。我就是抽出一部分我比较常用的内容写了下来,这样就可以直接按照上面的流程下来,完成需要的部分功能。
如需要了解更加详细的内容,可以登陆:https://github.com/jnicklas/carrierwave