以下是sinatra路线:
post '/accounts/:id/video' do |acc_id|
acc_id = params[:id].to_s
user = db_find('thrill.users',{_id: acc_id})
if user
db_update('thrill.users', { _id: acc_id},
{ '$set' =>
{ video: request.body.to_s }})
res(200, :sys_message => 'Video stored.')
else
res(201, :sys_message => "User not found")
end
end
它以字节数组的形式从客户端获得带有视频文件的响应。如果我直接将其存储在数据库中,则会以以下格式存储:
PhusionPassenger::Utils::TeeInput:0x007f48f8485b50
它必须以一种以后可以检索并发送回客户端的格式存储在数据库中。如何读取字节数组?用于存储的优选格式将是URL的形式,客户端可以访问并流式传输视频。如何才能做到这一点?
根据Rack规范,关于请求正文(这request.body
是:
输入流是一个类似IO的对象,其中包含原始HTTP POST数据。如果适用,其外部编码必须为“ ASCII-8BIT”,并且必须以二进制模式打开,以实现Ruby 1.9兼容性。输入流必须响应获取,读取和倒带。
该PhusionPassenger::Utils::TeeInput
课程符合这些要求。调用to_s
此调用的实例将仅给出该对象的Ruby字符串表示形式。要获取您需要调用的内容read
,例如
{ video: request.body.read }
这会将整个正文读取为字符串,然后您可以将其传递给Mongo。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句