活动存储缩略图持久性



我已经将我的Rails应用程序迁移到5.2.0。在我使用回形针之前。回形针会在上传图像时生成不同的变体,例如缩略图和头像。如何使用 ActiveStorage 实现这一点?我知道我们可以user.avatar.variant(resize_to_fit: [100, 100])做到这一点,但对我来说,这就像一遍又一遍地这样做。我的目标是在上传这些变体后对其进行预处理。

如果从您的经验来看这很糟糕,你们也可以建议更好的技术。

使用.processed是检查该变体是否已处理并上传到存储服务的正确方法。

回形针做得很好的一件事是styles: {}对象,您可以在其中列出要对缩略图等执行的所有不同转换,并命名它们。

以下是我处理命名和存储转换的方式。这也使我的模板语法更短:

class Image < ActiveRecord::Base
has_one_attached :image_file
def self.sizes
{
thumbnail: { resize: "100x100" },
hero1:     { resize: "1000x500" }
}
end
def sized(size)
self.image_file.variant(Image.sizes[size]).processed
end
end

然后在模板中,假设我有@image,我可以简单地调用@image.sized(:hero1)

@aguardientico是正确的,方法是将.processed方法添加到您的变体对象,该方法将使用 blob 键检查文件是否已存在于您的服务中,然后再尝试再次重现整个过程。

此外,还需要了解的是,resize_to_fit是一种图像处理宝石转换方法,Rails 5.2 尚不支持该方法。相反,现在它使用MiniMagick,您可以将>附加到回形针的resize方法中。

所以重写它看起来像user.avatar.variant(resize: "100x100>")

最新更新