Ruby使用carrierwave缓存图片
首先添加gem
gem 'carrierwave'
gem 'carrierwave-upyun'
然后运行
bundle install
再运行
rails generate uploader Avatar Attachment Base Cover
attachment_uploader.rb内容为
class AttachmentUploader < BaseUploader
def extension_white_list
%w(jpg jpeg png doc docx pdf txt zip rar)
end
end
base_uploader.rb内容为:
class BaseUploader < CarrierWave::Uploader::Base
storage ENV['UPYUN_STORAGE'].to_sym
def present?
!blank?
end
def blank?
self.url.blank?
end
def extension_white_list
%w(jpg jpeg png)
end
def filename
if super.present?
@prefix ||= SecureRandom.uuid.gsub('-', '')
"#{@prefix}.#{file.extension.downcase}"
end
end
end
avatar和cover_uploader.rb暂时不写内容
class CoverUploader < BaseUploader
end
在存图片信息的model(如User 或 Profile)中添加如下代码:
mount_uploader :avatar, AvatarUploader
在config/initializers下创建carrierwave.rb
CarrierWave.configure do |config|
config.storage = ENV['UPYUN_STORAGE'].to_sym
config.upyun_username = ENV['UPYUN_USERNAME']
config.upyun_password = ENV['UPYUN_PASSWORD']
config.upyun_bucket = ENV['UPYUN_BUCKET']
config.upyun_bucket_host = ENV['UPYUN_BUCKET_HOST']
end
里面的内容需要自己在application.yml中去配置,
如果使用github登录的话,就如下存入数据库:
remote_avatar_url: auth.extra.raw_info.avatar_url,
前端显示的话,
- if current_user.profile.avatar_url.present?
= image_tag current_user.profile.avatar_url,

浙公网安备 33010602011771号