我正在使用Carrierwave在我的 Rails 应用程序中上传 PDF 。我的目标是将 PDF 中的每个页面转换为 PNG,并确保每个 PNG 都驻留在 Carrierwave 根据我的模型等创建的上传目录中。
目前的进展是我能够上传 PDF,将其转换为 Carrierwave 创建的临时目录中的一系列 PNG,但我无法找到将这些转换后的 PNG 移动到指定上传目录的正确方法:
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
更新 - 在我当前的尝试和错误代码下方添加
我目前的代码如下:
def extract(format)
cache_stored_file! if !cached?
images = Magick::ImageList.new(current_path)
images.write File.dirname( current_path ) << "/" << filename
end
def filename
super != nil ? super.split('.').first + '.png' : super
end
使用任何方法将文件移动到上传目录的所有尝试都会导致某种“没有这样的文件或目录”错误。例如使用:
images.each do |f|
FileUtils.mv f.filename, File.join("#{Rails.root}/#{store_dir}", "image-0.png")
end
Errno::ENOENT (No such file or directory -
(/Users/reggie/ExampleApp/public/uploads/tmp/20120611-2259-7520-3647/image-0.png,
/Users/reggie/ExampleApp/public/uploads/painting/image/39/image-0.png))
欢迎任何建议来帮助我克服我遇到的这堵墙。
就像我为什么不使用操作逻辑的旁注一样,示例代码(见下文)的结果与上面相同,即在 Carrierwave 创建的临时目录中的转换文件,但是所有转换后的图像都保留在 .pdf 文件中扩大。
manipulate!(:format => :png) do |img|
img
end