我开始使用Shrine管理我的Rails应用程序中的文件上传。假设我们有一个模型Post
,它可以有多种类型的附件(图像,视频,音频等),这些文件将在上传时处理。是否建议每个文件类型使用一个上传器或一个上传器?
此外,在上传时自动更新file_type
记录的属性Post
的最佳做法是什么?
由于
答案 0 :(得分:1)
建议每个文件类型都有一个上传器,因为您需要根据文件类型不同地处理附件逻辑,甚至选择不同的存储服务。
例如,对于图像,您可能希望自己处理缩略图,或使用Cloudinary等服务即时生成缩略图。
另一方面,视频需要使用不同的工具进行不同的处理,因为这可能需要更长的时间,您可能希望使用Zencoder等服务。
一般情况下,您可能需要加载不同的Shrine插件,具体取决于您上传的文件大小,处理时间,文件存储位置等等。您仍然可以使用BaseUploader
通用附件逻辑,然后让ImageUploader
,VideoUploader
,AudioUploader
继承。
这些上传者还可以根据要求分支到多个上传者,例如PhotoUploader
或CoverUploader
。但是你肯定希望为不同的文件类型设置单独的上传器。
对于第二个问题,您可以覆盖Shrine附件设置器:
class Post
include FileUploader[:file]
def file=(value)
super
self.file_type = (file ? file.mime_type : nil)
end
end