小编Ale*_*lex的帖子

带标题的Sinatra流式响应

我想通过Sinatra应用程序代理远程文件.这需要将来自远程源头的HTTP响应流式传输回客户端,但我无法弄清楚如何在使用提供的块内部的流API时设置响应的头Net::HTTP#get_response.

例如,这不会设置响应标头:

get '/file' do
  stream do |out|
    uri = URI("http://manuals.info.apple.com/en/ipad_user_guide.pdf")
    Net::HTTP.get_response(uri) do |file|
      headers 'Content-Type' => file.header['Content-Type']

      file.read_body { |chunk| out << chunk }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这会导致错误Net::HTTPOK#read_body called twice (IOError):

get '/file' do
  response = nil
  uri = URI("http://manuals.info.apple.com/en/ipad_user_guide.pdf")
  Net::HTTP.get_response(uri) do |file|
    headers 'Content-Type' => file.header['Content-Type']

    response = stream do |out|
      file.read_body { |chunk| out << chunk }
    end
  end
  response
end
Run Code Online (Sandbox Code Playgroud)

ruby sinatra

6
推荐指数
1
解决办法
2620
查看次数

标签 统计

ruby ×1

sinatra ×1