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