我需要知道回形针附件图像样式的文件大小(不仅是已经有专用字段的:original
样式)而且我现在有点挣扎。
我在模型
我已经安装了paperclip-meta
gem,但这个gem实际上是返回样式尺寸,而不是文件大小。
我可以在文件上传到S3后检索文件大小。我已经阅读了一些关于发送Http头请求或解析返回的内容。我对此并不是很放心,因为文件是在本地生成的,并且服务器在某些时候可以访问它,所以看起来有点复杂。
答案 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中缓存值的优点。