2

我已经使用 Shrine 设置了直接上传到 S3。这很好用。其中,我启用了以下插件:

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

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

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

4

1 回答 1

3

我让它工作的方法是使用: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 不仅创造了一个了不起的软件(说真的,去阅读源代码),而且感谢他对支持社区的奉献。

于 2018-12-25T13:41:57.000 回答