我让它工作的方法是使用:refresh_metadata
插件,而不是:restore_cached_data
我最初使用的插件。感谢 Janko 为我指明了正确的方向。
阅读源代码提供了一些有用的见解。:store_dimensions
插件本身不提取尺寸 - 它向元数据散列添加宽度和高度,因此当 Shrine 的基类请求元数据时,它们也会被提取。
通过使用:restore_cached_data
,这是在每项作业中完成的。:restore_cached_data
在内部使用 :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 不仅创造了一个了不起的软件(说真的,去阅读源代码),而且感谢他对支持社区的奉献。