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,
posted @ 2020-04-13 22:25  Mr-Ran  阅读(161)  评论(0)    收藏  举报