2012-02-16 4 views
5

これはRubyでメモリの問題を引き起こしますか?サイズが10KBを超えると、Open-URIがTempFileに書き込むことが分かります。しかし、HTTPartyはTempFileに書き込む前にPDF全体をメモリに保存しようとしますか?HTTPartyでメモリに問題があり、大きなファイルをダウンロードする

src = Tempfile.new("file.pdf") 
src.binmode 
src.write HTTParty.get("large_file.pdf").parsed_response 
+0

HTTPartyはPDFをダウンロードするために意図されていませんでした。これは、小さなXMLやJSON交換用に設計されたAPIクライアントです。 –

+0

ここで何をすればいいですか? – maletor

+1

Open-URIで何が問題になっていますか?代わりにNet :: HTTPを使用して私の答えは以下のとおりです。 –

答えて

11

Net :: HTTPを使用できます。 the documentation(特に、「ストリーミング・レスポンス・ボディー」というセクション)を参照してください。ここで

は、ドキュメントからの例です:

uri = URI('http://example.com/large_file') 

Net::HTTP.start(uri.host, uri.port) do |http| 
    request = Net::HTTP::Get.new uri.request_uri 

    http.request request do |response| 
    open 'large_file', 'w' do |io| 
     response.read_body do |chunk| 
     io.write chunk 
     end 
    end 
    end 
end 
+1

驚くばかり!多少の関連する質問ですが、大容量ファイルのアップロードではどうしていますか? – maletor

+4

バイナリモードで書くためにファイルを開いた方がいいかもしれません。 'open(filename、 'wb'){| io | ...} '。 –

+0

深くデバッグしませんでしたが、プログラムがさらに実行されている間に "バックグラウンドで"ダウンロードされたようです。 – Nakilon

関連する問題