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说明