Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有条件地生成回形针附件的样式_Ruby On Rails_Ruby_Paperclip - Fatal编程技术网

Ruby on rails 有条件地生成回形针附件的样式

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 -

我正在研究回形针的高级用法

我有文件上传(图像或视频)功能,在我的项目中使用回形针。我想为大型(例如大于1000x1000px的)附加文件生成调整大小的样本。 我试过这个:

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
不过,在使用回形针时,您需要注意一些问题

  • 似乎您不仅需要指定样式,还需要指定任何转换选项等。不建议在单独的lambda中指定转换选项

  • 在我的例子中,将lambdas与回形针一起使用无法正常工作,而且似乎其他一些人也有此问题-调用了大约7次
    decise_styles
    方法,上次尝试确定尺寸时抛出异常-这就是为什么我将
    @styles
    并测试是否已经定义了它(虽然不漂亮,但它可以工作!)


  • 澄清一下-如果你有一个小图像,它正在生成
    样本
    (但它保持原始尺寸),而你对它一点也不感兴趣?您对通过
    是否已附加文件
    将文件附加到模型不感兴趣?@David是的,我对小图像的
    示例
    不感兴趣,我更喜欢使用
    原始
    文件。但对于大文件,我更喜欢先使用
    sample
    s,让用户在视图中选择sample和original。我感兴趣的是
    是否附加了文件
    文件附件、验证、
    预览
    生成等。我看到了。。。我仍然不确定您打算如何将较小的文件附加到您的模型中,但以下问题/答案肯定可以帮助您对排队等待回形针的任何图像进行预处理-@David nonono,我仍然需要较小的图像。我只想为大图像生成
    示例
    ,并始终保持
    原始
    预览
    。现在完全理解了。。。让我来玩玩吧。用
    upload替换它。在你的情况下,排队等待写入
    。。。如果这样做有效,我将相应地修改答案。不,我的意思是,我的
    has_attached_文件
    符号名称也会返回null。再次,我认为在您的情况下,应该
    has_attached_文件:在您的情况下上载
    ,因为这反映了数据库的状态。您可以发布堆栈跟踪信息吗。