2012-06-11 43 views
1

我正在使用Carrierwave在我的Rails應用程序中上傳PDF。我的目標是將PDF中的每個頁面轉換爲PNG,並確保這些PNG中的每一個駐留在Carrierwave基於我的模型創建的上傳目錄中。使用Carrierwave將多頁PDF處理爲PNG

當前的進度是我可以上傳PDF,將其轉換爲臨時目錄的一系列PNG格式的那個Carrierwave創建,但我不能制定出正確的方法來移動這些轉換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)) 

歡迎任何建議,以幫助我穿過我碰到的這堵牆。

正如一個側面說明,爲什麼我不使用的manipulate邏輯,示例代碼(見下文)的結果與上面相同,即由Carrierwave創建的臨時目錄轉換後的文件,然而全部轉換後的圖片保留.pdf文件擴展名。

manipulate!(:format => :png) do |img| 
    img 
end 

回答

1

那麼,你的主要問題是你的存儲文件夾不存在。

Carrierwave路徑構建相對於「公共」文件夾。

你應該使用這樣的事情在你上傳:

process :generate_png 

protected 
def generate_png 
    manipulate! do |image, index| 
     image.format = 'png' 
     image.write("#{Rails.root}/public/#{store_dir}/image-#{index}.png") 
     ... 
    end 
end 

要刪除這些文件使用callback

before :remove, :clear_uploader 

protected 
def clear_uploader 
    ... 
end 
相關問題