2010-07-10 32 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