2012-02-16 37 views
5

Điều này sẽ gây ra vấn đề về bộ nhớ với Ruby. Tôi biết Open-URI ghi vào một TempFile nếu kích thước vượt quá 10KB. Nhưng sẽ HTTParty thử và lưu toàn bộ PDF vào bộ nhớ trước khi nó ghi vào TempFile?Các vấn đề về bộ nhớ với HTTParty và tải xuống các tệp lớn

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

HTTParty đã không có ý định để tải về tập tin PDF. Đây là một ứng dụng khách API được thiết kế cho các trao đổi XML hoặc JSON nhỏ. –

+0

Vì vậy, tôi nên làm gì ở đây? – maletor

+1

Có vấn đề gì với Open-URI? Một thay thế bằng cách sử dụng Net :: HTTP là trong câu trả lời của tôi dưới đây. –

Trả lời

11

Bạn có thể sử dụng Net :: HTTP. Xem the documentation (đặc biệt là phần có tiêu đề "Cơ quan phản hồi trực tuyến").

Dưới đây là các ví dụ từ các tài liệu:

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

Tuyệt vời! Có một số câu hỏi liên quan nhưng bạn làm cách nào để tải lên tệp lớn? – maletor

+4

Cũng có thể tốt hơn nếu bạn mở tệp để viết ở chế độ nhị phân, chỉ cần thêm cờ 'b', như:' open (tên tệp, 'wb') {| io | ...} '. –

+0

Không gỡ lỗi sâu nhưng có vẻ như nó tải xuống "ở chế độ nền" trong khi chương trình chạy xa hơn. – Nakilon

Các vấn đề liên quan