【问题标题】:Memory issues with HTTParty and download large filesHTTParty 的内存问题和下载大文件
【发布时间】:2012-02-16 01:12:07
【问题描述】:

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

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

【问题讨论】:

  • HTTParty 不适用于下载 PDF。它是为小型 XML 或 JSON 交换而设计的 API 客户端。
  • Open-URI 有什么问题?使用 Net::HTTP 的替代方法在我下面的答案中。

标签: ruby-on-rails ruby ruby-on-rails-3 memory httparty


【解决方案1】:

您可以使用 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

【讨论】:

  • 太棒了!有点相关的问题,但是您如何为大文件上传执行此操作?
  • 如果你打开文件以二进制模式写入可能会更好,只需添加b标志,如:open(filename, 'wb') { |io| ... }
  • 没有深入调试它,但似乎它在程序进一步运行时“在后台”下载。
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2016-02-18
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多