2011-12-20 54 views
7

我正在使用CarrierWave在Rails 3.1中進行文件上傳,並且正在尋找一種節省服務器空間的方法。許多上傳的照片大小超過20MB,因此在將其處理爲1024 x 1024之後,我想刪除原始照片。在上傳者類中有沒有簡單的方法來做到這一點?如何讓carrierwave在處理版本後不保存原始文件?

感謝, --mark

+0

難道我的解決方案爲您工作? – Lichtamberg 2012-04-23 14:59:41

回答

3

在你的模型和刪除的照片,您可以定義一個after_save的回調..

我不知道你的模型,但如果你自定義它這樣的事情可能工作:

class User << ActiveRecord::Base 

    after_create :convert_file 
    after_create :delete_original_file 

    def convert_file 
    # do the things you have to do 
    end 

    def delete_original_file 
    File.delete self.original_file_path if File.exists? self.original_file_path 
    end 
end 
+0

你能提供一些實際的例子嗎? – 2012-03-05 03:48:51

+0

添加了示例 – Lichtamberg 2012-03-05 21:59:15

+0

它適合您嗎?如果是的話,如果你把我的答案標記爲正確的話,會很好。 – Lichtamberg 2012-03-26 16:45:05

1
class FileUploader < CarrierWave::Uploader::Base 

    after :store, :delete_original_file 

    def delete_original_file(new_file) 
    File.delete path if version_name.blank? 
    end 

    include CarrierWave::RMagick 

    storage :file 
    . 
    . # other configurations 

end 
22

我曾經有兩個版本,並意識到,我並不不需要原來

01的

因此而不是

version :thumb do 
    process :resize_to_limit => [50, 50] 
    end 

version :normal do 
    process :resize_to_limit => [300,300] 
end 

我刪除了:正常,並將此

process :resize_to_limit => [300, 300] 

現在,原來保存在大小,我需要和我沒有服務器

上的第三未形象
+1

真棒,我認爲這是一個很好的解決方案,只是做任何版本塊以外的過程,所以如果它真的很大,你不保存原始版本。謝謝 – FireDragon 2013-01-03 23:57:47

+1

我想補充一點,如果你仍然想要在上傳文件的文件名中加入''normal_「',就像'version'塊中發生的那樣,你可以使用明確的版本名稱給基礎上傳器'version_names <<:medium'。 – 2013-01-09 01:59:01

7

大家好! 所選解決方案對我無效。 我的解決方案:

after :store, :remove_original_file 

    def remove_original_file(p) 
    if self.version_name.nil? 
     self.file.delete if self.file.exists? 
    end 
    end 
+1

謝謝,你應該得到一個餅乾! – 2014-06-29 17:54:18

0

這是一個有點技巧,但具有性能上的優勢

my_uploader.send :store_versions!, open(my_file) 
相關問題