carrierwave基本使用:上传和下载

#添加gem
gem "carrierwave"  #目前是1.1.0

#建立资源模型作为示例
rails g scaffold resume name:string attach:string

#建立上传模型,与上面的示例模型中的字段记性匹配,对于生成的attachment_uploader.rb的文件内容不需要修改
rails g uploader attachment  #必须添加了carrierwave才能使用uploader

#model中使用mount_uploader方法对需要上传的字段记性标记
class Resume < ActiveRecord::Base
  #标记的是attach字段
  mount_uploader :attach, AttachmentUploader  
end

#建立上传的表单,采用从本地文件中上传
<%= form_for(@resume) do |f|%>
  <%= f.label :name%>
  <%= f.text_field :name %>
  <%= f.label :attach %>
  <%= f.file_field :attach %> #注意是file_field,而不是text_field
  <%= f.submit "save" %>
<% end %>

#从图片链接中获取直接上传
<%= form_for(@resume) do |f|%>
  <%= f.label :name%>
  <%= f.text_field :name %>
  <%= f.label :attach %>
  <%= f.text_field :remote_attach_url %> #需要添加可以注入的参数params.require(:resume).permit(:name, :remote_attach_url)
  <%= f.submit "save" %>
<% end %>
#carrierwave会对上传的链接地址记性鉴别,无效的图片链接地址会不会被保存,因此需要添加判断语句
#resumes/index.html.erb
<%= image_tag resume.attach_url if resume.attach? %>

结合carrierwave和imagemagick对图片进行裁剪

#mac安装imagemagick
brew install imagemagick #安装
brew upgrade imagemagick #更新

#ubuntu安装imagemagick
sudo  apt-get install imagemagick
convert --version #查看是否安装成功

#添加gem
gem 'mini_magick'

#编辑attachment_uploader.rb文件
class AttachmentUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  #图片进行上传的过程中会自动裁剪为这个大小的图片  
  version :thumb do
    process resize_to_fit: [50, 50]
    #resize_to_limit: [50, 50] 
  end
end

#resize_to_fit和resize_to_limit的区别
如果原图片比预期需要设置的图片小,那么resize_to_fit会放大到预期的图片,resize_to_limit不会

#resize_to_fit接受的值
resize_to_fit(width=50, height=50)

#限制width的值,让height随其改变
resize_to_fit(50, nil)

#前端显示该大小的图片
<%= image_tag resume.attach_url(:thumb) %>

carrierwave中出现格式不符或者大小不符的情况

class AttachmentUploader < CarrierWave::Uploader::Base
  #格式问题
  def extension_whitelist
    %w(jpg jpeg gif png)
  end

  #文件大小
  def size_range
    0..10.kilobytes
  end
end

#格式不符问题显示en.yml
en:
  errors:
    messages:
      extension_whitelist_error: "格式不正确"
      max_size_error: "文件不能大于10M"
      #min_size_error: size should be greater than %{min_size}
      #max_size_error: size should be less than %{max_size}

图片上传到云端(使用upyun)

见gem upyun说明

results matching ""

    No results matching ""