CarrierWave README

安装

安装最新稳定版

[sudo] gem install carrierwave

下面代码加入 Gemfile

gem 'carrierwave'

重启 server

CarrierWave 0.5 不兼容 Rails 2,如果你使用的是 Rails 2,请使用 github 仓库中的 CarrierWave 0.4-stable 分支

开始使用

生成一个 uploader

rails generate uploader Avatar

将会生成下面文件

app/uploaders/avatar_uploader.rb

使用 uploader 类接收和保存文件

uploader = AvatarUploader.new

uploader.store!(my_file)

uploader.retrieve_from_store!('my_file.png')

这将会保存2个文件,一个永久存储文件和一个临时存储文件。可以使用不同的存储方式,文件系统或者云存储。

多数时候 CarrierWave 会合 ORM 一起使用。在 model 类中挂载 uploader 到列上

ActiveRecord

确认 CarrierWave 已经加载,如果没有加载需要手工加载 CarrierWave (在 Rails 中通常不需要这么做)

require 'carrierwave/orm/activerecord'

添加一个字符串列到 model 中

rails g migration add_avatar_to_users avatar:string
rake db:migrate

把 uploader 挂载到列上面

class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
end

可以直接给属性赋值,当保存记录的时候会自动存储文件

u = User.new
u.avatar = params[:file]
u.avatar = File.open('somewhere')
u.save!
u.avatar.url # => '/url/to/file.png'
u.avatar.current_path # => 'path/to/file.png'
u.avatar.identifier # => 'file.png'

改变存储目录

重写 store_dir 方法可以改变存储目录

class MyUploader < CarrierWave::Uploader::Base
  def store_dir
    'public/my/upload/directory'
  end
end

如果要保存在顶级目录,可以给 store_dir 返回 nil

改变缓存文件保存目录

class MyUploader < CarrierWave::Uploader::Base
  def cache_dir
    '/tmp/projectname-cache'
  end
end

安全上传

使用白名单限制上传文件的扩展名

class MyUploader < CarrierWave::Uploader::Base
  def extension_white_list
    %w(jpg jpeg gif png)
  end
end
This entry was posted in ruby on rails and tagged . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>