Shrine 文件上传 - 所有文件类型一个上传器或每个文件类型一个上传器?

Shrine file uploads - One uploader for all file types OR one uploader per file type?

我开始使用 Shrine 来管理我的 Rails 应用程序中的文件上传。假设我们有一个模型 Post,它可以有多种类型的附件(图像、视频、音频等),这些文件将在上传时进行处理。建议每个文件类型使用一个 上传器 还是所有文件类型一起使用一个上传器

此外,在上传时自动更新 Post 记录的属性 file_type 的最佳做法是什么?

谢谢

建议每个文件类型都有一个上传器,因为您会希望根据文件类型以不同方式处理附件逻辑,甚至选择不同的存储服务。

例如,对于图像,您可能希望自己处理缩略图,或者使用 Cloudinary.

等服务即时生成它们

另一方面,视频需要使用不同的工具进行不同的处理,由于这可能需要更长的时间,您可能需要使用 Zencoder.

等服务

一般来说,您可能希望加载不同的 Shrine 插件,具体取决于您上传的文件大小、处理时间、文件存储位置等。您仍然可以使用 BaseUploader有一些共同的附件逻辑,然后让 ImageUploaderVideoUploaderAudioUploader 继承它。

这些上传者还可以根据需要分成多个上传者,例如 PhotoUploaderCoverUploader。但是您肯定希望为不同的文件类型设置单独的上传器。


对于你的第二个问题,你可以覆盖 Shrine 附件 setter:

class Post
  include FileUploader[:file]

  def file=(value)
    super
    self.file_type = (file ? file.mime_type : nil)
  end
end