1

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 では、あるストリームから別のストリームへのバイナリの書き込みが許可されていません。

4

1 に答える 1

0

1 つの問題は、要求を適切に行っていないことです。これを行うにhttp requestは:

uri = URI.parse(yoururl)
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)

その後、応答で必要なことを行うことができます。あなたの場合、次のようになります。

get '/' do
  url=PM.link(params[:url])
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Get.new(uri.request_uri)
  response = http.request(request)

end

ただし、これはストリーミングでは機能しません。これはあなたを助けるはずのチュートリアルです:http://www.intridea.com/blog/2012/5/24/building-streaming-rest-apis-with-ruby#

于 2012-12-31T08:20:07.017 に答える