5
我想通過Sinatra應用程序代理遠程文件。這需要將來自遠程源頭的HTTP響應流式傳輸回客戶端,但我無法弄清楚如何在Net::HTTP#get_response
提供的塊內使用流式API時設置響應頭。帶有標頭的Sinatra流式響應
例如,這將不設置響應頭:
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
,這導致錯誤: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