Я могу загрузить PDF-файл и преобразовать его в формат PNG, и он правильно отображается в браузере с помощью помощника <%= image_tag "path/to/image" %>
. Однако фактическое расширение файла НЕ изменяется с PDF на PNG. Поэтому, если вы загружаете изображение, оно загружается как image.pdf. Как только он будет загружен, если вы измените расширение вручную на «png», он правильно откроет программное обеспечение для изображений на локальном компьютере. Я хотел бы, чтобы процесс RMagick автоматически изменял расширение, а также формат файла. Я могу написать код, который удаляет PDF-файл и добавляет расширение PNG, когда файл будет сохранен, но похоже, что я что-то пропустил. Я решил, что это то, что нужно делать автоматически, когда я конвертирую в другой формат. Вот мой класс ImageUploader.rb
. Я использую Carrierwave и RMagick.Rails 4 Carrierwave + RMagick, конвертирование PDF в PNG изменяет кодировку файла, но не расширение?
# app/uploads/image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
include Sprockets::Rails::Helper
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
process :convert_to_png
def convert_to_png
manipulate!(format: "png", read: { density: 400 }) do |img, index, options|
options = { quality: 100 }
img.resize_to_fill!(850, 1100)
img
end
end
# Add 'png' file extension so file becomes 'image.pdf.png'
def filename
"#{original_filename}.png" if original_filename
end
end