Ruby on rails 将GridFS文件对象转换为要通过carriewave上载的文件对象,然后在Rails中使用ffmpeg进行处理

Ruby on rails 将GridFS文件对象转换为要通过carriewave上载的文件对象,然后在Rails中使用ffmpeg进行处理,ruby-on-rails,ffmpeg,mongoid,carrierwave,gridfs,Ruby On Rails,Ffmpeg,Mongoid,Carrierwave,Gridfs,我有一个GridFS文件对象 Mongoid::GridFs::Fs::File\u id:53a277dc700ca7ac146f5797,长度:2237337,chunkSize:261120,上传日期:2014-06-19 05:40:44 UTC,md5:“390968a8ef198f8537495468366f67b9”,文件名:“720p\u 5.MP4”,内容类型:“二进制/八位字节流”,别名:nil,元数据:nil 现在我需要一个Tempfile(或File will do)实例

我有一个GridFS文件对象

Mongoid::GridFs::Fs::File\u id:53a277dc700ca7ac146f5797,长度:2237337,chunkSize:261120,上传日期:2014-06-19 05:40:44 UTC,md5:“390968a8ef198f8537495468366f67b9”,文件名:“720p\u 5.MP4”,内容类型:“二进制/八位字节流”,别名:nil,元数据:nil

现在我需要一个Tempfile(或File will do)实例

文件:/tmp/fileupload20140620-4601-19via7k

因为我处理的文件是一个视频文件,所以我需要用ffmpeg进一步处理它,以获得不同版本的视频文件


通常我可以得到一个tmp文件,但是对于一个视频文件,tempfile的大小似乎很小,ffmpeg也给出了错误,可能是创建的temp文件不正确。我不知道我做错了什么。

这似乎对我来说是个窍门,我在tempfile中获得了必要的对象(即文件对象),我可以使用ffmpeg转换它

<!--language: ruby-->
a = Mongoid::GridFs.get(file_id.to_s)  
extn = File.extname  a.filename  
name = File.basename a.filename, extn  
tempfile = Tempfile.new([name,extn])  
tempfile.binmode  
tempfile.write(a.data)

a=Mongoid::GridFs.get(文件\u id.to\u s)
extn=File.extname a.filename
name=File.basename a.filename,extn
tempfile=tempfile.new([name,extn])
tempfile.binmode
tempfile.write(a.data)