ファイルをクライアントにストリーミングする前に、Content-Length ヘッダーを設定しようとしています。私はそれを設定しています:
response.headers['Content-Length'] = "12341234"
そして、私は次のようなことをします:
steam do |out|
file_chunks.each do |chunk|
out << chunk
end
out.close
end
ただし、ブラウザーでファイルをダウンロードしようとすると、Content-Length ヘッダーが空白になります。これが Sinatra の問題なのか、Passenger/Apache の問題なのか、誰にもわかりませんか?
何が起こっているのかは、このコードブロック間のレイヤーであり、応答が実際に送信されると、最初にヘッダーが送信され、データブロックが空であるため、明示的に設定してもコンテンツの長さが0であると想定されます。
送信しているファイルの大きさをブラウザに伝える別の方法はありますか?
編集
シナトラの問題ではなく乗客の問題のようです。サーバーを Thin で実行すると、Content-Length が正しく渡されます。すでに設定されている場合、Content-Length を変更しないように質問が変わると思いますか?