使用Shrine在背景中提取图像尺寸

时间:2018-12-24 18:31:33

标签: ruby shrine

我已经使用Shrine设置了直接上传到S3的功能。这很好。除其他外,我启用了以下插件:

Shrine.plugin :backgrounding
Shrine.plugin :store_dimensions 
Shrine.plugin :restore_cached_data

如果我错了,请纠正我,但是图像尺寸提取似乎是同步完成的。如果我让用户通过Uppy批量上传图片,然后将其全部保存,那么这似乎要花费很长时间。

我想做的是异步执行图像尺寸提取-我不需要可用于缓存文件的尺寸。如果可能,我想在文件升级到商店时在后台执行此操作。有办法吗?

1 个答案:

答案 0 :(得分:1)

我通过使用:refresh_metadata插件而不是我最初使用的:restore_cached_data来实现此目的。感谢Janko在正确的方向上pointing me

阅读源代码提供了一些有用的见解。 :store_dimensions插件本身不会提取维度-它是元数据哈希的adds宽度和高度,因此当Shrine的基类requests metadata时,它们也会被提取。

通过使用:restore_cached_data,可以在每次分配时完成此操作。 :restore_cached_data uses :refresh_metadata内部,因此我们可以使用该知识仅在将文件提升到商店时调用它。

我在初始化程序中设置了:backgrounding:store_dimensions,因此最终的上传程序可以简化为:

class ImageUploader < Shrine
  plugin :refresh_metadata
  plugin :processing

  process(:store) do |io, context|
    io.refresh_metadata!(context)
    io
  end
end

通过这种方式,我们从Uppy持久存储数据的速度非常快,并且当文件升级到商店时,我们让后台作业提取维度,以便以后使用。

最后,如果您对神宫有疑问,我强烈建议您使用专门的Google Group。致扬科(Janko)不仅是他创造了令人惊叹的软件(认真地阅读源代码),还因为他致力于支持社区。