HTTParty的内存问题并下载大文件

mal*_*tor 5 ruby memory ruby-on-rails httparty ruby-on-rails-3

这是否会导致Ruby的内存问题.我知道如果大小超过10KB,Open-URI会写入TempFile.但HTTParty会在写入TempFile之前尝试将整个PDF保存到内存中吗?

src = Tempfile.new("file.pdf")
src.binmode
src.write HTTParty.get("large_file.pdf").parsed_response
Run Code Online (Sandbox Code Playgroud)

Mar*_*mas 11

您可以使用Net :: HTTP.请参阅文档(特别是标题为"Streaming Response Bodies"的部分).

以下是文档中的示例:

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
Run Code Online (Sandbox Code Playgroud)

  • 如果打开文件以二进制模式写入也可能更好,只需添加`b`标志,如:`open(filename,'wb'){| io | ......}` (4认同)