Class: Pindo::AWSS3Client
- Inherits:
-
Object
- Object
- Pindo::AWSS3Client
- Defined in:
- lib/pindo/client/aws3sclient.rb
Instance Attribute Summary collapse
-
#access_key_id ⇒ Object
Returns the value of attribute access_key_id.
-
#access_key_secret ⇒ Object
Returns the value of attribute access_key_secret.
-
#asw_s3_object ⇒ Object
Returns the value of attribute asw_s3_object.
-
#attach_url ⇒ Object
Returns the value of attribute attach_url.
-
#bucket_name ⇒ Object
Returns the value of attribute bucket_name.
-
#default_url ⇒ Object
Returns the value of attribute default_url.
-
#region ⇒ Object
Returns the value of attribute region.
Instance Method Summary collapse
- #delete_file(file_name) ⇒ Object
- #find_bucket! ⇒ Object
-
#initialize ⇒ AWSS3Client
constructor
A new instance of AWSS3Client.
- #set_progress(index_num, total_num, char = '>') ⇒ Object
- #upload_file(binary_file: nil, isAttach: false) ⇒ Object
Constructor Details
#initialize ⇒ AWSS3Client
Returns a new instance of AWSS3Client.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/pindo/client/aws3sclient.rb', line 27 def initialize() begin config_file = File.join(File::(Pindoconfig.instance.pindo_common_configdir), "pgyer_client_config.json") config_json = JSON.parse(File.read(config_file)) @region = config_json["region"] @bucket_name = config_json["bucket_name"] @access_key_id = config_json["access_key_id"] @access_key_secret = config_json["access_key_secret"] @default_url = config_json["default_url"] @attach_url = config_json["attach_url"] rescue => error raise Informative, "加载pgyer配置文件失败, 需要执行 pindo setup 或者pindo env dreamstudio" end http_proxy = ENV['http_proxy'] || ENV['https_proxy'] if http_proxy puts "正在使用代理 : #{http_proxy}" Aws.config.update( http_proxy: http_proxy, credentials: Aws::Credentials.new(@access_key_id, @access_key_secret), region: @region ) else Aws.config.update( credentials: Aws::Credentials.new(@access_key_id, @access_key_secret), region: @region ) end @s3_client ||= Aws::S3::Client.new( { http_proxy: http_proxy, region: @region, credentials: Aws::Credentials.new(@access_key_id, @access_key_secret) }.compact.compact ) # S3Client = Aws::S3::Client.new( # access_key_id: 'ACCESS_KEY_ID', # secret_access_key: 'SECRET_ACCESS_KEY', # region: 'REGION' # ) end |
Instance Attribute Details
#access_key_id ⇒ Object
Returns the value of attribute access_key_id.
18 19 20 |
# File 'lib/pindo/client/aws3sclient.rb', line 18 def access_key_id @access_key_id end |
#access_key_secret ⇒ Object
Returns the value of attribute access_key_secret.
19 20 21 |
# File 'lib/pindo/client/aws3sclient.rb', line 19 def access_key_secret @access_key_secret end |
#asw_s3_object ⇒ Object
Returns the value of attribute asw_s3_object.
24 25 26 |
# File 'lib/pindo/client/aws3sclient.rb', line 24 def asw_s3_object @asw_s3_object end |
#attach_url ⇒ Object
Returns the value of attribute attach_url.
22 23 24 |
# File 'lib/pindo/client/aws3sclient.rb', line 22 def attach_url @attach_url end |
#bucket_name ⇒ Object
Returns the value of attribute bucket_name.
16 17 18 |
# File 'lib/pindo/client/aws3sclient.rb', line 16 def bucket_name @bucket_name end |
#default_url ⇒ Object
Returns the value of attribute default_url.
21 22 23 |
# File 'lib/pindo/client/aws3sclient.rb', line 21 def default_url @default_url end |
#region ⇒ Object
Returns the value of attribute region.
15 16 17 |
# File 'lib/pindo/client/aws3sclient.rb', line 15 def region @region end |
Instance Method Details
#delete_file(file_name) ⇒ Object
87 88 89 90 91 |
# File 'lib/pindo/client/aws3sclient.rb', line 87 def delete_file(file_name) bucket = find_bucket!() file = bucket.object(file_name) file.delete end |
#find_bucket! ⇒ Object
80 81 82 83 84 85 |
# File 'lib/pindo/client/aws3sclient.rb', line 80 def find_bucket!( ) bucket = Aws::S3::Bucket.new(@bucket_name, client: @s3_client) raise "Bucket '#{bucket_name}' not found" unless bucket.exists? return bucket end |
#set_progress(index_num, total_num, char = '>') ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/pindo/client/aws3sclient.rb', line 149 def set_progress(index_num, total_num, char ='>' ) progress_str = sprintf("%.2f", 100.0 * index_num / total_num ) total_size = sprintf("%.2f", 1.00 * total_num / 1024 /1024 ) index = 40.0 * index_num / total_num # (char * (index/1).floor).ljust(100, ' ') = "已上传:#{progress_str}\%【" + (char * (index/1).floor).ljust(40.0, '_') + "】Total: #{total_size} M" @upload_message = Funlog.instance.() # @spinner.reset # $stdout.print " 已上传: #{progress_str} \% ", (char * (index/1).floor).ljust(100, ' '), " Total: #{total_size} M \r" # $stdout.flush # print " 已上传: #{progress_str} \% ", (char * (index/1).floor).ljust(100, ' '), " Total: #{total_size} M \r" # $stdout.flush end |
#upload_file(binary_file: nil, isAttach: false) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/pindo/client/aws3sclient.rb', line 94 def upload_file(binary_file:nil, isAttach:false) extension = File.extname(binary_file) filename = File.basename(binary_file) filesize = File.size(binary_file) size_level = 1024 * 1024 bytes = File.binread(binary_file) checksum = Digest::MD5.hexdigest(bytes) file_uuid = SecureRandom.uuid total_m = sprintf("%.2f", 1.00 * filesize / 1024 /1024 ) puts "文件路径: #{binary_file}" puts "文件大小: #{total_m}M" upload_path = @default_url content_disposition = nil if isAttach upload_path = @default_url + @attach_url content_disposition = "attachment; filename=#{filename}" end object_key = upload_path + file_uuid + extension puts "上传路径: #{object_key}" puts upload_result = nil Funlog.instance.("开始上传...") begin obj = Aws::S3::Object.new(@bucket_name, object_key) progress = Proc.new do |bytes, totals| set_progress(bytes.sum, totals.sum) end if isAttach obj.upload_file(binary_file, progress_callback: progress, content_disposition:content_disposition) else obj.upload_file(binary_file, progress_callback: progress) end upload_result = object_key Funlog.instance.(@upload_message) Funlog.instance.("#{binary_file} 上传成功!") rescue => ex Funlog.instance.("#{binary_file} 上传失败!") end return upload_result end |