class DownloadRequest
Downloads a file to a specified folder.
Attributes
error[R]
file_size[R]
url[R]
Public Class Methods
get(*args)
click to toggle source
# File lib/download_request.rb, line 10 def get(*args) new(*args).get end
new(url, download_folder)
click to toggle source
# File lib/download_request.rb, line 17 def initialize(url, download_folder) @url = URI.parse(url) # puts @url.path @http = Net::HTTP.new(@url.host, @url.port) if @url.scheme == "https" @http.use_ssl = true @http.verify_mode = OpenSSL::SSL::VERIFY_NONE end @download_folder = download_folder @file_size = 0 end
Public Instance Methods
get()
click to toggle source
Writes file segments to disk immediately instead of storing in memory
# File lib/download_request.rb, line 30 def get return unless @error.nil? dirname = File.dirname(@download_folder) unless File.directory?(dirname) FileUtils.mkdir_p(dirname) end local_file = ::File.open(@download_folder, "wb") partial = true @http.request_get(@url) do |response| case response.code when "200" response.read_body do |segment| local_file.write(segment) end @file_size = ::File.size(@download_folder) partial = false when "302" @error = "Token Not Authorized to Access Specified File" else @error = "#{response.code} #{response.class.name}" end end rescue => e # Net::ReadTimeout, SocketError @error = "(#{e.class}) #{e.message}" ensure local_file.close if local_file ::File.delete(@download_folder) if partial && ::File.exist?(@download_folder) end