sinatra を使用して Web アプリケーションを作成しています。基本的に、ページの URL をリクエストとして受け取り、そのページからメディア ファイルへのリンクを取得します。それが取得されると、メディア ファイルへのストリームが開かれます。ここで、このストリームを HTTP 応答としてクライアントに送信したいと考えています。私は次のことをしようとしました。
get '/' do
url=PM.link(params[:url])
puts url
buf=nil
open(url, 'rb') do |rf|
while(buf=rf.read(1024)) do
stream do |out|
out << buf
end
end
end
end
そしてこれも
get '/' do
url=PM.link(params[:url])
puts url
buf=nil
open(url, 'rb') do |rf|
stream do |out|
out.write rf.read
end
end
end
しかし、どちらも機能しません。メディアファイルを適切に保存するローカルファイルに保存しようとしました。しかし、アウトストリームに書き込もうとすると、データなしで応答します。何か不足していますか?または、sinatra では、あるストリームから別のストリームへのバイナリの書き込みが許可されていません。