CarrierWave настроить оригинальное имя файла

Я пытаюсь настроить исходное имя файла для изображения, загруженного через CarrierWave, добавив что-то вроде уникальный UUID. Проблема в том, что я не хочу, чтобы этот UUID также добавлялся к именам последующих версий.

Цель здесь в том, что я хочу, чтобы исходный файл был защищен неизвестностью. Таким образом, пользователь не может просто взять "thumb_image.jpg" и получить доступ к исходному "image.jpg", просто удалив "thumb_". Что-то вроде этого будет целью:

  • "00000001-image.jpg" (оригинал)
  • "thumb-image.jpg" (версия 1)
  • "small-thumb-image.jpg" (версия 2)
  • и Т. Д.

Кажется, я не могу найти способ правильно интегрировать это, используя следующие вики-документы:

Любая помощь будет оценена по достоинству. Спасибо!


person Tony Beninate    schedule 07.07.2018    source источник


Ответы (1)


Хорошо, кажется, я смог заставить это работать со следующим подходом:

def filename
  "#{secure_token}_#{original_filename.chomp(File.extname(super))}.#{file.extension}" if original_filename.present?
end

version :thumb do
  process convert: 'jpg'

  def full_filename(for_file = file)
    "#{model.id}_thumb.jpg"
  end
end

protected

def secure_token
  var = :"@#{mounted_as}_secure_token"
  model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
person Tony Beninate    schedule 07.07.2018