我正在使用CarrierWave在Rails 3.1中上传文件,我正在寻找一种节省服务器空间的方法。许多上传的照片都超过了20MB,所以在将它们处理成1024 x 1024后,我想删除原始照片。在上传器类中有没有简单的方法呢?
谢谢, --mark
答案 0 :(得分:23)
我曾经有两个版本,并意识到我不需要原来的
所以没有
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 :(得分: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
答案 2 :(得分: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
答案 3 :(得分: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
答案 4 :(得分:0)
这有点黑客但具有性能优势
my_uploader.send :store_versions!, open(my_file)