Sinatra上传流式传输

3

是否可能通过Sinatra应用程序路由处理POST方式的大文件上传,同时进行流式传输,例如:

uri  = URI('http://0.0.0.0:4567/files')
file = File.open("/path/to/1.iso")
req  = Net::HTTP::Post.new(uri.path)

req.content_type         = 'application/octet-stream'
req['Transfer-Encoding'] = 'chunked'
req.body_stream          = file

Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(req)
end

这是关于一个网络服务的问题,目前我不知道如何处理这个问题,我试图向我的实际路由发出此请求:

post '/file' do
   File.open('/path/to/downloaded.iso', 'ab') do |file|
     file << request.body.read
   end
end

但显然它失败了:
 `!! Unexpected error while processing request: closed stream`

我也无法让非流媒体版本正常工作。

非常感谢任何帮助,谢谢。

1个回答

3
req['Transfer-Encoding']

不会强制Net::HTTP使用分块编码进行上传,但只是使您的sinatra认为它是分块的。请参考此处的代码片段以实现分块上传。

Excon是一个很好的HTTP Ruby客户端,在这个提交后可以实现分块上传。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接