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

时间:2016-12-09 08:32:32

标签: ruby-on-rails upload shrine

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

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

由于

1 个答案:

答案 0 :(得分:1)

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

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

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

一般情况下,您可能需要加载不同的Shrine插件,具体取决于您上传的文件大小,处理时间,文件存储位置等等。您仍然可以使用BaseUploader通用附件逻辑,然后让ImageUploaderVideoUploaderAudioUploader继承。

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

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

class Post
  include FileUploader[:file]

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