我已经使用Shrine设置了直接上传到S3的功能。这很好。除其他外,我启用了以下插件:
Shrine.plugin :backgrounding
Shrine.plugin :store_dimensions
Shrine.plugin :restore_cached_data
如果我错了,请纠正我,但是图像尺寸提取似乎是同步完成的。如果我让用户通过Uppy批量上传图片,然后将其全部保存,那么这似乎要花费很长时间。
我想做的是异步执行图像尺寸提取-我不需要可用于缓存文件的尺寸。如果可能,我想在文件升级到商店时在后台执行此操作。有办法吗?
答案 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)不仅是他创造了令人惊叹的软件(认真地阅读源代码),还因为他致力于支持社区。 p>