6

如何获取回形针附件每种样式的文件大小?

@user.attachment_file_size似乎不起作用

@user.attachment(:style).size

给出一个与实际文件大小无关的数字

4

4 回答 4

6

除了原始样式之外,我也没有找到如何获取给定样式的文件大小。

回形针源代码所示,@user.attachment.size返回最初分配的文件大小。没有办法获得它的特定风格......

一个解决方案是:

open(@user.attachment(:style)).size

但根本没有效率。

为了做得好,您可能应该在附件表中添加一些“自定义大小”字段,一旦为每种样式保存附件,您将填写这些字段......

于 2014-09-21T18:09:59.837 回答
4

用户按 ID 查找(例如)用户有:照片

@user.last.photo_file_size
于 2013-02-12T13:42:35.627 回答
0

您可以使用Paperclip::Style#geometry在样式哈希中获取类似“WIDTHxHEIGHT”的字符串,以获取给定对象的样式:

string = @user.attachment.styles[:size].geometry

您可以将字符串拆分为具有高度或宽度:

width = string.split("x")[0]

height = string.split("x")[1]
于 2015-06-20T23:26:17.793 回答
0

看来实际上是可能的

只需要为每种样式设置临时文件并应用大小方法。

假设您有两种样式large,并且small为您的附件调用image,并且您在模型中创建了两个额外的字段large_sizesmall_size保存这些值。

只需将以下代码添加到您的模型中:

before_create :assign_sizes

private
def assign_sizes
    self.large_size = image.queued_for_write[:large].size.to_i
    self.small_size = image.queued_for_write[:small].size.to_i
end

字段large_sizesmall_size将填充每个样式文件大小。例如,这将在文件发送到 S3 之前完成。所以没有额外从 S3 查询文件头。

于 2017-08-08T14:46:04.980 回答