我正在使用CarrierWave在Rails 3.1中進行文件上傳,並且正在尋找一種節省服務器空間的方法。許多上傳的照片大小超過20MB,因此在將其處理爲1024 x 1024之後,我想刪除原始照片。在上傳者類中有沒有簡單的方法來做到這一點?如何讓carrierwave在處理版本後不保存原始文件?
感謝, --mark
我正在使用CarrierWave在Rails 3.1中進行文件上傳,並且正在尋找一種節省服務器空間的方法。許多上傳的照片大小超過20MB,因此在將其處理爲1024 x 1024之後,我想刪除原始照片。在上傳者類中有沒有簡單的方法來做到這一點?如何讓carrierwave在處理版本後不保存原始文件?
感謝, --mark
在你的模型和刪除的照片,您可以定義一個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
你能提供一些實際的例子嗎? – 2012-03-05 03:48:51
添加了示例 – Lichtamberg 2012-03-05 21:59:15
它適合您嗎?如果是的話,如果你把我的答案標記爲正確的話,會很好。 – Lichtamberg 2012-03-26 16:45:05
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
我曾經有兩個版本,並意識到,我並不不需要原來
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]
現在,原來保存在大小,我需要和我沒有服務器
上的第三未形象真棒,我認爲這是一個很好的解決方案,只是做任何版本塊以外的過程,所以如果它真的很大,你不保存原始版本。謝謝 – FireDragon 2013-01-03 23:57:47
我想補充一點,如果你仍然想要在上傳文件的文件名中加入''normal_「',就像'version'塊中發生的那樣,你可以使用明確的版本名稱給基礎上傳器'version_names <<:medium'。 – 2013-01-09 01:59:01
大家好! 所選解決方案對我無效。 我的解決方案:
after :store, :remove_original_file
def remove_original_file(p)
if self.version_name.nil?
self.file.delete if self.file.exists?
end
end
謝謝,你應該得到一個餅乾! – 2014-06-29 17:54:18
這是一個有點技巧,但具有性能上的優勢
my_uploader.send :store_versions!, open(my_file)
難道我的解決方案爲您工作? – Lichtamberg 2012-04-23 14:59:41