0
我将上传的PDF转换为图像,每页一个图像。我已经想出了如何使用MiniMagick::Tool::Convert
生成图像,但我不知道如何编写上传器的version
块,以便我可以访问一组图像URL。如何使用Carrierwave和MiniMagick(Ruby on Rails)将PDF转换为图像数组
这里是我上传至今:
class DocumentUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
# storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :jpg do
process :convert_to_images
process :set_content_type_jpg
def convert_to_images(*args)
image = MiniMagick::Image.open(current_path)
image.pages.each_with_index do |page, index|
MiniMagick::Tool::Convert.new do |convert|
convert.background 'white'
convert.flatten
convert.density 300
convert.quality 95
convert << page.path
convert << "#{CarrierWave.root}/#{store_dir}/image-#{index}.jpg"
end
end
end
end
def set_content_type_jpg(*args)
self.file.instance_variable_set(:@content_type, "image/jpg")
end
# Add a white list of extensions which are allowed to be uploaded.
def extension_white_list
%w(jpg jpeg gif png doc docx pdf)
end
end
这在正确的目录下生成image-0.jpg
,image-1.jpg
等。但是现在我无法在我的观点中引用这些图像,甚至不知道有多少图像。当我需要将图像上传到S3时,这也不起作用。我如何才能让Carrierwave处理这个图像集合的文件存储,而不是单个图像?
它也看起来像我可能需要添加一个新的数据库列来存储页数。有没有办法让我的上传者根据这个计数返回一组图片网址?
我也愿意切换到另一个宝石。用回形针,神龛或Refile,这会更容易些吗?