如何处理 Rails 中的多种文件格式?

How to handle multiple file formats in Rails?

假设我有一个类似媒体池的项目。基本上我希望能够上传您可以上传的任何文件(图片、视频、pdf 等)。

我正在考虑使用 refile,因为它支持即时处理图像,这很好,因为将有一个图像 api 应该让用户以任何方式请求图像他需要的尺寸。

但是,我将如何处理 pdf 上传或视频上传(甚至视频处理)?

是否有更好的替代方法来重新归档?

非常感谢!

首先,文件附件库一般可以上传任何类型的文件。最受欢迎的是 PaperclipCarrierWave。它们使您能够处理上传,这适用于视频。但是,它们不允许您即时处理。

另一方面,

DragonflyRefile 是专为即时处理而设计的。 Refile 的一个优点是它支持直接上传。 Refile 的一个缺点是您必须通过其 Rack 应用程序提供所有文件,因此如果您在 S3 上上传了您不会处理的视频,您仍然需要为第一个非缓存渲染支付性能损失。 Dragonfly 的一个优点是它具有更高级的即时处理支持,并且还允许您在上传时进行处理。

最后,我们来到神社。 Shrine 专为处理上传而设计,它是唯一一个原生支持 background jobs, which is especially useful for longer processing like video transcoding. Shrine also has a Transloadit integration, if you want to delegate processing to a 3rd-party service. But you can also get on-the-fly processing with Shrine, using services like Cloudinary or even hooking up Dragonfly (see this post). Shrine has support for direct uploads, like Refile. Some of the other notable features include: metadata support, logging, flexible file validation, resumable uploads、更好的安全性和其他的库。

由于 Shrine 可以说比任何其他文件附件库具有最多的功能和灵活性,我建议使用它。