我通过标准文件输入接收请求参数中的文件
def create
file = params[:file]
upload = Upload.create(file: file, filename: "img.png")
end
但是,对于大型上传,我想在后台作业中执行此操作。 Sidekiq 或 Resque 等流行的后台作业选项依赖于 Redis 来存储参数,因此我不能只通过 Redis 传递文件对象。
我可以使用 Tempfile
,但在某些平台(例如 Heroku)上,本地存储并不可靠。
我有什么选择可以让它在“任何”平台上可靠?
最佳答案
我建议直接上传到类似 Amazon S3 的服务然后在后台作业中按照您认为合适的方式处理文件。
当用户上传文件时,您可以放心,它会安全地存储在 S3 中。您可以使用私有(private)存储桶来禁止公共(public)访问。然后,在您的后台任务中,您可以通过传递文件的 S3 URI 来处理上传,并让您的后台工作人员下载文件。
我不知道您的后台工作人员对该文件做了什么,但不用说,可能没有必要再次下载它。毕竟它存储在某个地方。
我用过 carrierwave-direct gem 在过去与成功。既然你提到了 Heroku,他们有一个详细的 guide用于将文件直接上传到 S3。
关于ruby-on-rails - 将文件传递给事件作业/后台作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46705045/