Carrierwave Uploader указывает каталог версий, используя то же имя файла для Rails 5 - PullRequest
0 голосов
/ 23 мая 2018

Я хочу использовать то же имя файла, но другой каталог для версии моего загруженного файла.

upload file imageName.jpg should create
   uploads/drawing/2018/imageName.jpg    #which is the original file
   uploads/thumbs/2018/imageName.jpg     #a 120 x 100 scaled version of the original file

В моем: class DrawingUploader

Я переопределяю метод store_dir, который правильно сохраняет мой загруженный файл imageName.jpg в uploads / drawing / 2018

def store_dir
    "uploads/drawings/2018"
end

Затем я создаю уменьшенную версию и хочу указать имя файла, чтобы оно совпадало с оригиналом (без добавления «большого пальца») и каталогом для него.Имя файла работает с полным_файлом, но store_dir - нет.

version :thumb do
  process resize_to_fit: [120, 100]

  def store_dir (for_file = model.drawing.file)
    "uploads/thumbs/2018"
  end
  def full_filename (for_file = model.drawing.file)
    "imageName.jpg"
  end
end

. Этот файл 120x100 хранится в файлах uploads / drawing / 2018 / imageName.jpg

Он по-прежнему использует store_dir (чертежне превью) определено до версии.

Больше информации из моих тестов:

, если файл uploads / drawing / 2018 / imageName.jpg уже существует при вызове загрузчика, определение store_dir, определенное в версии, работает правильно и помещает файл вuploads / thumbs / 2018 / imageName.jpg

, если в версиях используется только полное имя_файла, но я включаю путь для указанного имени файла, он размещает этот путь внутри пути, который последний раз использовал загрузчик, так:

version :thumb do
   process resize_to_fit: [120, 100]

   def full_filename (for_file = model.drawing.file)
     "uploads/thumbs/2018/imageName.jpg"
   end
end

создает файл в uploads / drawing / 2018 / uploads / thumbs / 2018 / imageName.jpg

, и если я пытаюсь указать относительный путь, он правильно создает каталоги, но никогда не записывает файл версии -- папки просто пусты

version :thumb do
 process resize_to_fit: [120, 100]

 def store_dir (for_file = model.drawing.file)
   "../../uploads/thumbs/2018"
 end
 def full_filename (for_file = model.drawing.file)
   "imageName.jpg"
 end
end

создает пустой каталог на uploads / drawing / 2018, файл imageName.jpg не записывается

1 Ответ

0 голосов
/ 23 мая 2018

Кажется, это проблема несущей волны при кэшировании.Я нашел этот взлом, который был очень полезен: https://github.com/carrierwaveuploader/carrierwave/issues/1861

Что я использовал следующим образом:

def store_dir
  if version_name
    @dirName = "thumbs"
  else
    @dirName = "drawings"
  end

  "uploads/#{@dirName}/2018"
end

def filename
  "newImage.jpg" if original_filename.present?
end

def full_filename(for_file)
  if model.new_record?
    super(for_file)
  else
    for_file
  end
end

# Create different versions of your uploaded files:
version :thumb do
  process resize_to_fit: [120, 100]
end
...