使用 Carrierwave remote_image_url,如何设置要使用的文件名?

Using Carrierwave remote_image_url, how can you set the filename to use?

我目前正在使用 Carrierwave 远程下载图像。这工作正常。我想弄清楚的是如何将文件名设置为不同于从 URL 下载的文件名。

这是我的抽佣任务:

    @desk.desk_images.create(
      :file_name_to_use => "testing",
      :remote_image_url => photo.url(size)
    )

在我的上传者群中:desk_image_uploader.rb

class DeskImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  storage :fog

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

  version :thumb do
    process resize_to_fill: [200, 150]
    process :quality => 90

    def full_filename(for_file = model.logo.file)
      parts     = for_file.split('.')
      extension = parts[-1]
      name      = parts[0...-1].join('.')
      "#{model.file_name_to_use}_#{version_name}.#{extension}"
    end

  end
end

desk_image.rb

class DeskImage < ActiveRecord::Base
  belongs_to :desk

  mount_uploader :image, DeskImageUploader

  attr_accessor :file_name_to_use
end

这没有正确存储在数据库中。 DeskImage.image 正在存储原始文件名而不是我传递的覆盖 "testing"...

有人知道我如何自定义 Carrierwave 存储在数据库中并使用的文件名吗?

谢谢

好的,我已经对您的代码进行了一些精简,以确保我们可以确定没有任何混杂因素。第一步是将 filename 移出 version 块。你能试试这个吗:

class DeskImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  storage :fog

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

  version :thumb do
    process resize_to_fill: [200, 150]
    process :quality => 90    
  end

  def filename
    "test-#{model.id}.#{File.extname(super)}"
  end
end