Carrierwave:当多个和自定义文件名时,如何使缩略图文件名与正常文件相同

时间:2018-06-11 10:56:03

标签: ruby-on-rails carrierwave

现在使用carrierwave创建多个自定义文件名上传器。 我读了document,并且当上传多个文件时,上传者可以为每个文件名命名。

但是,缩略图文件名与普通文件名不同。

EX)

  

AAAAAAAAA.jpg

     

BBBBBBBBB.jpg

     

thumb_CCCCCCCCC.jpg

     

thumb_DDDDDDDDD.jpg

我想像下面那样做

EX)

  

AAAAAAAAA.jpg

     

BBBBBBBBB.jpg

     

thumb_AAAAAAAAA.jpg

     

thumb_BBBBBBBBB.jpg

代码如下。谢谢

class ImageUploader < CarrierWave::Uploader::Base

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
    process :resize_to_fit => [400, 200]
  end

  def extension_white_list
    %W[jpg jpeg gif png]
  end

  def filename
    "#{secure_token}.#{file.extension}" if original_filename.present?
  end

  def secure_token
    media_original_filenames_var = :"@#{mounted_as}_original_filenames"

    unless model.instance_variable_get(media_original_filenames_var)
      model.instance_variable_set(media_original_filenames_var, {})
    end

    unless model.instance_variable_get(media_original_filenames_var).map{|k,v| k }.include? original_filename.to_sym
      new_value = model.instance_variable_get(media_original_filenames_var).merge({"#{original_filename}": SecureRandom.uuid})
      model.instance_variable_set(media_original_filenames_var, new_value)
    end

    model.instance_variable_get(media_original_filenames_var)[original_filename.to_sym]
  end
end

0 个答案:

没有答案