lib/fir/util/ali_uploader.rb in fir-cli-2.0.16 vs lib/fir/util/ali_uploader.rb in fir-cli-2.0.17

- old
+ new

@@ -1,10 +1,10 @@ # frozen_string_literal: true require_relative './app_uploader' -# require 'byebug' + module FIR class AliUploader < AppUploader def upload_icon if skip_update_icon? logger.info 'skip update icon...' @@ -14,11 +14,11 @@ # 拿到 icon 的授权 icon_url = uploading_info[:cert][:icon][:upload_url] icon_info = uploading_icon_info logger.debug "icon_url = #{icon_url}, icon_info = #{icon_info}" - put_file(icon_url, uploading_icon_info, uploading_info[:cert][:icon][:custom_headers]) + put_file(icon_url, uploading_icon_info, uploading_info[:cert][:icon][:custom_headers], false) callback_to_api(callback_url, callback_icon_information) end rescue StandardError => e # ignore icon error logger.info "ignore icon upload error #{e.message}" @@ -48,17 +48,46 @@ exit 1 end protected - def put_file(url, file, headers) - RestClient::Request.execute( - method: 'PUT', - url: url, - payload: file, - headers: headers, - timeout: 300 - ) + def put_file(url, file, headers, need_progress = true) + + uri = URI(url) + hostname = uri.hostname + + + File.open(file_path, 'rb') do |io| + t = Time.now + http = Net::HTTP.new(hostname, 443) + http.use_ssl = true + req = Net::HTTP::Put.new(uri.request_uri, headers) + req.content_length = io.size + req.body_stream = io + Net::HTTP::UploadProgress.new(req) do |progress| + if need_progress + if progress.upload_size == io.size + puts "upload finished" + else + if Time.now - t > 0.5 + puts "progress: #{ ((progress.upload_size / io.size.to_f) * 100).round(2) }%" + t = Time.now + end + end + end + end + res = http.request(req) + end + + + + # RestClient::Request.execute( + # method: 'PUT', + # url: url, + # payload: file, + # headers: headers, + # timeout: 300 + # ) end def callback_url "#{fir_api[:base_url]}/auth/ali/callback" end