2010-07-10 25 views
24

如何讓Paperclip在上傳時不保存原始文件?或者甚至更好,將原始文件的縮放版本存儲起來?如何讓回形針不保存原始文件?

+0

看看我的答案[這裏](http://stackoverflow.com/questions/25467130/rails-4-and-paperclip-stop-the-original-style-file-upload-to -copy-from-an/25585186) – laertiades 2014-08-31 15:14:39

回答

43

我相信你可以簡單地定義一個style爲:original用paperclip替換原來的那個尺寸。

:styles => { :original => '300x168>', :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, ...} 
+0

太棒了。謝謝你,克里斯。我不敢相信我忽略了這一點。 – Jade 2010-07-22 13:38:45

+0

不錯的解決方案! – flunder 2012-11-05 17:13:26

+0

你測試過了嗎?有用? – Hamdan 2014-04-30 17:59:46

0

回形針總是默認保存原件,但我相信,如果你只是從你的移植中刪除它,那麼它不會嘗試並保存它。

我在我的模型上保存縮放的原稿,以便用戶以後可以編輯其圖像。我的模型看起來像這樣:

:styles => { :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, :resized_thumb => {:geometry => "115x70>"}, :deal => {:geometry => "64x56#"}, 
:cropped_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}#", :jcrop => true}, 
:resized_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}>"}, 

:orig => '300x168>', #this is the scaled original that I call later 


:cropped_orig => {:geometry => '300x168#', :jcrop => true}, 
:resized_orig => {:geometry => '300x168>'} }, 
:processors => [:jcropper] 
+0

感謝您的迴應,Trip。 – Jade 2010-07-20 23:50:33

4

Cris G的解決方案在最簡單的情況下可能不錯,但它有一定的侷限性。 認爲:style:原創Paperclip處理首先其他人,所以後更新:原始圖像(現在小得多)將成爲後續處理的來源。 因此,你被迫保持:最佳分辨率的原始風格。 由於需要使用處理器裁剪圖像,情況會變得更糟:這就是您真正需要真正原始質量的情況。 )

因此,我建議你有點原始(需要找出如何讓模型的每一個附件)解決方案:

after_save :reprocess_attach 

private 

def reprocess_attach 
    if self.<atch_name>.present? && Pathname.new(self.<atch_name>.path).exist? 
     self.<atch_name>.save 
     File.unlink(self.<atch_name>.path) 
    end 
end 

它並不關心什麼樣的處理是幕後走向臺前。它只是殺死原始文件)

+0

你是絕對正確的,覆蓋幾何:原始影響所有其他處理。但是,你能解釋一下你的解決方案嗎?請停止原件上傳,我很困惑!謝謝! – Sujimichi 2016-02-17 02:12:41

+0

@Sujimichi好了,保存後,「reprocess_attach」檢查附件是否作爲原始文件存在。如果確實如此,它確保所有文件都在文件系統(保存)中被刪除並刪除原始文件。 – 2016-02-18 14:00:53