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