У меня есть тысячи изображений, загруженных со следующей структурой имен файлов.carrierwave recreate_version создает превью с именами файлов, отличными от исходного сохраненного имени файла
def filename
"#{model.id}" + "-v#{timestamp}" + "-" + Category.find("#{model.category_id}").slug + "-" + CategoryItem.find("#{model.category_item_id}").slug + ".png" if original_filename.present?
end
def timestamp
var = :"@#{mounted_as}_timestamp"
model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
end
Мне нужно создать превью для всех изображений, чтобы ускорить определенное время загрузки страницы. Я установки версии большого пальца в файл пользователя
# Create different versions of your uploaded files:
version :thumb do
process :resize_to_limit => [110, nil]
end
, но теперь, когда я бегу: CategoryItem.each {|item| item.image_value.recreate_versions! if item.image_value? }
создан большой палец, но имя файла большого пальца изображения не совпадает с исходным файлом с за добавленным «thumb_» в начале имени файла.
saved filename: 1-v1474175808-shoes-runners.png
thumb filename: thumb_1-v1472111618-shoes-runners.png (different timestamp)
CategoryItem.find(1).image_value_url(:thumb): thumb_1-v1474175808-shoes-runners.png (original filename timestamp)
Так вызова image_tag CategoryItem.find(1).image_value_url(:thumb)
ищет файл, который не существует.
Как я могу запустить recreate_versions
и иметь имя файла большого пальца так же, как и исходное сохраненное имя файла, но с добавлением «thumb_» на передний план, не удаляя отметку времени?
Update:
я теперь следующее нахождение этой https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Customize-your-version-file-names
version :thumb do
process :resize_to_limit => [110, nil]
def full_filename(for_file = model.image_value.file)
'thumb_' + File.basename(model.image_value.path).to_s
end
end
моя проблема в том, что даже если я звоню прямое имя файла File.basename(model.image_value.path).to_s
, когда я бегу recreate_versions
он все еще сохраняет файл с текущей меткой времени, а не захват исходного имени файла. Я подумал, что, возможно, имя файла меняется в БД и захватывает новое имя файла, но оно остается таким же, как ожидалось, поэтому я понятия не имею, почему он не захватывает прямое значение из db и не создает случайную метку времени в названии.
Также я, хотя, возможно, def full_filename(for_file = model.image_value.file)
разве работает, но если я изменить его на
version :thumb do
process :resize_to_limit => [110, nil]
def full_filename(for_file = model.image_value.file)
'thumb_' + "random-text"
end
end
большого пальца изображение сохраняется как «thumb_random-текст», так она проходит через этот код
Он по-прежнему сохраняет текущую временную метку, а не имя исходного изображения. Я устал ''thumb_' + model.image_value.to_s', но он использует весь url – Rob
, можете ли вы пояснить, почему вы указываете метку времени в имени файла? –
Метод отметки времени непосредственно из документов несущей. Я добавил '' thumb_ '+ File.basename (model.image_value.path) .to_s' из чтения http://stackoverflow.com/questions/5132847/displaying-a-carrierwave-filename-in-the-view. 'File.basename (model.image_value.path) .to_s' захватывает точное имя файла, сохраненное в db, но оно все же дает ему текущую временную метку в сохраненном имени файла и не копирует имя файла непосредственно из db. – Rob