Ruby on rails 有条件地生成回形针附件的样式
我正在研究回形针的高级用法 我有文件上传(图像或视频)功能,在我的项目中使用回形针。我想为大型(例如大于1000x1000px的)附加文件生成调整大小的样本。 我试过这个:Ruby on rails 有条件地生成回形针附件的样式,ruby-on-rails,ruby,paperclip,Ruby On Rails,Ruby,Paperclip,我正在研究回形针的高级用法 我有文件上传(图像或视频)功能,在我的项目中使用回形针。我想为大型(例如大于1000x1000px的)附加文件生成调整大小的样本。 我试过这个: has_attached_file :upload, styles: { sample: '1000x1000>', preview: ['150x150', :jpg] }, convert_options: { sample: '-quality 90', preview: '-quality 85 -
has_attached_file :upload, styles: { sample: '1000x1000>', preview: ['150x150', :jpg] },
convert_options: { sample: '-quality 90', preview: '-quality 85 -strip' }
但此代码始终生成样本,即使是较小的文件。在生成样本之前,有没有办法检查附件尺寸?好的,由于lambdas和回形针出现了一些问题,我花了很长时间才解决了这个问题: 您需要使用lambda来决定根据图像大小动态应用哪些样式-图像大小本身可以从排队等待处理的图像中确定
has_attached_file :image,
styles: lambda { |attachment| attachment.instance.decide_styles }
def decide_styles
unless @styles
@styles = {}
@styles[:preview] = { preview: {
geometry: "150x150",
format: :jpg,
convert_options: "-quality 85 -strip" }}
dimensions = Paperclip::Geometry.from_file(image.queued_for_write[:original].path)
if dimensions.width > 1000 or dimensions.height > 1000
@styles[:sample] = { sample: {
geometry: "1000x1000>",
convert_options: "-quality 90" }}
end
end
@styles
end
不过,在使用回形针时,您需要注意一些问题
decise_styles
方法,上次尝试确定尺寸时抛出异常-这就是为什么我将@styles
并测试是否已经定义了它(虽然不漂亮,但它可以工作!)澄清一下-如果你有一个小图像,它正在生成
样本
(但它保持原始尺寸),而你对它一点也不感兴趣?您对通过是否已附加文件
将文件附加到模型不感兴趣?@David是的,我对小图像的示例
不感兴趣,我更喜欢使用原始
文件。但对于大文件,我更喜欢先使用sample
s,让用户在视图中选择sample和original。我感兴趣的是是否附加了文件
文件附件、验证、预览
生成等。我看到了。。。我仍然不确定您打算如何将较小的文件附加到您的模型中,但以下问题/答案肯定可以帮助您对排队等待回形针的任何图像进行预处理-@David nonono,我仍然需要较小的图像。我只想为大图像生成示例
,并始终保持原始
和预览
。现在完全理解了。。。让我来玩玩吧。用upload替换它。在你的情况下,排队等待写入。。。如果这样做有效,我将相应地修改答案。不,我的意思是,我的has_attached_文件
符号名称也会返回null。再次,我认为在您的情况下,应该has_attached_文件:在您的情况下上载
,因为这反映了数据库的状态。您可以发布堆栈跟踪信息吗。