我想通过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)