【问题标题】:Paperclip attachment file size回形针附件文件大小
【发布时间】:2013-01-26 00:37:31
【问题描述】:

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

@user.attachment_file_size 似乎不起作用

@user.attachment(:style).size

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

【问题讨论】:

  • 最新版本的回形针也不给我文件大小。不知道发生了什么。

标签: ruby-on-rails-3 paperclip attachment filesize


【解决方案1】:

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

@user.last.photo_file_size

【讨论】:

    【解决方案2】:

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

    in the paperclip source code 所见,@user.attachment.size 返回最初分配的文件大小。没有办法获得它的特定风格...

    解决方案是:

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

    但根本没有效率。

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

    【讨论】:

    • 您好 Pierrea,可能不再是您的问题。但是我在下面找到了一个解决方案,方法是在上传到 S3 之前捕获每种样式的临时文件。
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      好像真的有可能

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

      假设您的附件有两种样式largesmall,称为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 查询文件头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多