如何告诉Paperclip不要保存原始文件?

27

如何告诉Paperclip在上传时不要保存原始文件,或者更好的是将缩放后的文件作为原始文件存储?


请查看我的答案这里 - laertiades
3个回答

46

我认为你可以简单地定义一个样式来控制:original大小,从而使用paperclip替换原始图片。

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

太棒了。谢谢你,Chris。我简直不敢相信我竟然忽略了那个。 - Jade

4
Cris G的解决方案在大多数简单情况下可能很好,但它有局限性。请考虑以下内容:style:原始Paperclip首先处理其他所有内容,因此更新的原始图像(现在要小得多)将成为后续处理的源。因此,您被迫将:original style保持为最佳分辨率。当您需要使用处理器裁剪图像时,情况会变得更糟:这是您真正需要原始质量的情况。因此,我建议您使用相对简单的解决方案(需要找出如何获取模型的每个附件)。
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

IT并不关心在舞台背后进行了什么处理。它只是删除原始文件。


你说得完全正确,覆盖 :original 的几何图形会影响其他所有文件的处理。但是,你能否更详细地解释一下如何阻止原始文件被上传的解决方案?我感到有些困惑!谢谢! - Sujimichi
@Sujimichi 嗯,在保存之后,“reprocess_attach”会检查附件是否存在于原始文件中。如果是,则确保所有文件都在文件系统中刷新(保存)并删除原始文件。 - Roaring Stones

0

默认情况下,Paperclip始终保存原始文件,但我认为,如果您只是从迁移中删除它,则不会尝试保存它。

我在我的模型上保存了一个缩放的原始文件,以便用户稍后可以编辑其图像。我的模型如下:

: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]

感谢您的回复,Trip。 - Jade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接