Sha256: 7ca4f32387abbd003807008f3eacc72940f0833c4c4dd2905e4f2eb44076a731
Contents?: true
Size: 1.65 KB
Versions: 2
Compression:
Stored size: 1.65 KB
Contents
# frozen_string_literal: true require "openssl" require "net/http" require "uri" module Nsrr module Helpers # Downloads a file to a specified folder. class DownloadRequest class << self def get(*args) new(*args).get end end attr_reader :url, :error, :file_size def initialize(url, download_folder) escaped_url = URI.escape(url) @url = URI.parse(escaped_url) @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 rescue @error = "Invalid Token" end # Writes file segments to disk immediately instead of storing in memory def get return unless @error.nil? local_file = ::File.open(@download_folder, "wb") partial = true @http.request_get(@url.path) 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 end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
nsrr-5.0.0 | lib/nsrr/helpers/download_request.rb |
nsrr-5.0.0.rc | lib/nsrr/helpers/download_request.rb |