1

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

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

谢谢

4

1 回答 1

2

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

例如,对于图像,您可能希望自己处理缩略图,或者使用Cloudinary等服务即时生成它们。

另一方面,需要使用不同的工具对视频进行不同的处理,因为这可能需要更长的时间,您可能需要使用Zencoder等服务。

一般来说,您可能想要加载不同的 Shrine 插件,具体取决于您上传的文件的大小、处理需要多长时间、文件存储在哪里等。您仍然可以拥有一个BaseUploader具有一些常见附件逻辑的插件,然后拥有ImageUploader, VideoUploader,AudioUploader继承自它。

然后,这些上传器还可以根据要求分支成多个上传器,例如PhotoUploaderCoverUploader. 但是您肯定希望有不同文件类型的单独上传者。


对于第二个问题,您可以覆盖 Shrine 附件设置器:

class Post
  include FileUploader[:file]

  def file=(value)
    super
    self.file_type = (file ? file.mime_type : nil)
  end
end
于 2016-12-09T18:17:17.227 回答