2012-02-16 19 views
5

這是否會導致Ruby的內存問題。如果文件大小超過10KB,我知道Open-URI寫入TempFile。但是,在寫入TempFile之前,HTTParty會嘗試將整個PDF保存到內存中嗎?HTTParty的內存問題和下載大文件

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

HTTParty的目的不是用於下載的PDF文件。它是專爲小型XML或JSON交換而設計的API客戶端。 – 2012-02-16 01:20:45

+0

那麼我應該在這裏做什麼? – maletor 2012-02-16 01:24:31

+1

Open-URI有什麼問題?下面是我使用Net :: HTTP的另一種選擇。 – 2012-02-16 02:04:13

回答

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 2012-02-16 03:49:04

+4

如果打開文件以二進制模式寫入,也可能會更好,只需添加'b'標誌,如:'open(filename,'wb'){| io | ''。 – 2014-02-20 23:27:12

+0

沒有深入調試,但似乎它在程序進一步運行時下載「在後臺」。 – Nakilon 2016-09-19 13:09:59