使用 Shrine 在背景中提取图像尺寸
Extracting image dimensions in the background with Shrine
我已经设置了使用 Shrine 直接上传到 S3。这很好用。其中,我启用了以下插件:
Shrine.plugin :backgrounding
Shrine.plugin :store_dimensions
Shrine.plugin :restore_cached_data
如果我错了请纠正我,但图像尺寸提取似乎是同步完成的。如果我让用户通过Uppy批量上传图片然后全部持久化,这似乎需要很长时间。
我想做的是异步执行图像尺寸提取 - 我不需要可用于缓存文件的尺寸。如果可能的话,我想在文件被提升到商店时在后台执行此操作。有办法吗?
我实现它的方法是使用 :refresh_metadata
插件,而不是我最初使用的 :restore_cached_data
。感谢 Janko 在正确的方向 pointing me。
阅读源代码提供了一些有用的见解。 :store_dimensions
插件本身不提取尺寸 - 它 adds width and height to the metadata hash so that when Shrine's base class 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 获取的持久数据非常快,我们让后台作业在文件提升到存储时提取维度,以便以后使用。
最后,如果你有关于 Shrine 的问题,我强烈推荐它的专用 Google Group。感谢 Janko 不仅创造了一个令人惊叹的软件(说真的,请阅读源代码),而且还感谢他对支持社区的奉献。
我已经设置了使用 Shrine 直接上传到 S3。这很好用。其中,我启用了以下插件:
Shrine.plugin :backgrounding
Shrine.plugin :store_dimensions
Shrine.plugin :restore_cached_data
如果我错了请纠正我,但图像尺寸提取似乎是同步完成的。如果我让用户通过Uppy批量上传图片然后全部持久化,这似乎需要很长时间。
我想做的是异步执行图像尺寸提取 - 我不需要可用于缓存文件的尺寸。如果可能的话,我想在文件被提升到商店时在后台执行此操作。有办法吗?
我实现它的方法是使用 :refresh_metadata
插件,而不是我最初使用的 :restore_cached_data
。感谢 Janko 在正确的方向 pointing me。
阅读源代码提供了一些有用的见解。 :store_dimensions
插件本身不提取尺寸 - 它 adds width and height to the metadata hash so that when Shrine's base class 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 获取的持久数据非常快,我们让后台作业在文件提升到存储时提取维度,以便以后使用。
最后,如果你有关于 Shrine 的问题,我强烈推荐它的专用 Google Group。感谢 Janko 不仅创造了一个令人惊叹的软件(说真的,请阅读源代码),而且还感谢他对支持社区的奉献。