恢复特定回形针图像样式的文件大小

时间:2017-06-15 17:05:45

标签: ruby-on-rails paperclip

我需要知道回形针附件图像样式的文件大小(不仅是已经有专用字段的:original样式)而且我现在有点挣扎。

  • 我在模型

  • 中找不到解决办法
  • 我已经安装了paperclip-meta gem,但这个gem实际上是返回样式尺寸,而不是文件大小。

  • 我可以在文件上传到S3后检索文件大小。我已经阅读了一些关于发送Http头请求或解析返回的内容。我对此并不是很放心,因为文件是在本地生成的,并且服务器在某些时候可以访问它,所以看起来有点复杂。

1 个答案:

答案 0 :(得分:1)

我有同样的需要。正如您所提到的,Paperclip附件具有:original样式文件大小的数据库字段,但size方法只返回该值。

我想要一个快速的解决方案,允许在文件系统或S3(我使用两者)中确定附件大小,而无需实际执行HTTP标头检查。查看Paperclip :: Storage结构后,我意识到我可以通过在size中添加以下内容来覆盖每个存储方法的config/initializers/paperclip.rb方法:

module Paperclip
  module Storage
    module Filesystem
      def size(style_name = default_style)
        if original_filename
          File.size(path(style_name))
        else
          false
        end
      end
    end

    module S3
      def size(style = default_style)
        if original_filename
          s3_object(style).content_length
        else
          false
        end
      rescue Aws::Errors::ServiceError => e
        false
      end
    end
  end
end

除了图像尺寸,宽高比等之外,paperclip-meta宝石似乎还有size方法。我不确定它是否比您尝试时更新。它具有在DB中缓存值的优点。