carrierwave-aliyun 1.1.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 876c53c7233505f4afc350bbf46e91c8a488d1842a74f4ee5802259d96468846
4
- data.tar.gz: b32c6cc04411c9f5c3115e78b91a7902f3d2a4068cbb325316631363c709de34
3
+ metadata.gz: '09185a0291f96fed424df86a4be3815f13171b74f4b6d891b945de90bdc3924d'
4
+ data.tar.gz: ff50669bd39b9da0ff3b9c5c00c9e646fc0f3f46e7f0b1b45643c9d76abe66fd
5
5
  SHA512:
6
- metadata.gz: 8b5211cab35612c46cb22c50816bc9846682cac9aaf14ce293229201550df03c773fde7b843c3fcf6ab0eb1500a14cf7cd0866183be525c10d12dbb26ae4c08b
7
- data.tar.gz: a3c1233546856b1fcc834810753bf4390f49dce8c8d9301b77e6096bc77a932280b83c386cf107c981053fefcefb5c1c103e069e1993362cd3937a18d33ef505
6
+ metadata.gz: fd28e434c5bd6d43ccfff8f5b98dff4343d1440c3ded461397b95bde45e280bfde4481e0c06d0af3da8d38009620546c36cd777fd5c6bae893038e94533cc8ba
7
+ data.tar.gz: 88a37bc5bbf656be44cb50232943faac2ba26698fdee306f3441f0365e853066fdfb97297b9c7c0012d256ba80f02b69f78af8e585938de7917926dfa473f4a1
@@ -1,3 +1,26 @@
1
+ ## 1.2.1
2
+
3
+ - 修正 #79 某些场景中文文件名无法正确上传的问题;
4
+ - 修正 #70 上传文件以后 tmp 目录依然还残留着 cache 文件的问题;
5
+
6
+ ## 1.2.1
7
+
8
+ - 实现 `size` 方法,修正更新图片数组时,新上传的图片会取代旧图片的问题。(#73)
9
+
10
+ ## 1.2.0
11
+
12
+ - 整理修复 OSS 文件访问 URL 的生成方式,去掉 img host,保持和最新 OSS API 一样的逻辑。
13
+ - 生成 URL 的时候,不再强制替换为 https,保持 `aliyun_host` 的配置;
14
+
15
+ ## 1.1.2
16
+
17
+ - 修正 aliyun-sdk 0.7.0 以上 Thumb URL 生成的支持;
18
+ - Requirement aliyun-sdk >= 0.7.0;
19
+
20
+ ## 1.1.2
21
+
22
+ - 修正废弃调用方式,避免在 Ruby 2.7 里面出现 warning.
23
+
1
24
  ## 1.1.1
2
25
 
3
26
  - 对于 CarrierWave 的 cache 机制正确支持;
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  This gem adds support for [Aliyun OSS](http://oss.aliyun.com) to [CarrierWave](https://github.com/jnicklas/carrierwave/)
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/carrierwave-aliyun.svg)](https://rubygems.org/gems/carrierwave-aliyun) [![Build Status](https://travis-ci.org/huacnlee/carrierwave-aliyun.svg?branch=master)](https://travis-ci.org/huacnlee/carrierwave-aliyun) [![Code Climate](https://codeclimate.com/github/huacnlee/carrierwave-aliyun/badges/gpa.svg)](https://codeclimate.com/github/huacnlee/carrierwave-aliyun)
5
+ [![Gem Version](https://badge.fury.io/rb/carrierwave-aliyun.svg)](https://rubygems.org/gems/carrierwave-aliyun) [![build](https://github.com/huacnlee/carrierwave-aliyun/workflows/build/badge.svg)](https://github.com/huacnlee/carrierwave-aliyun/actions?query=workflow%3Abuild)
6
6
 
7
7
  > NOTE: 此 Gem 是一个 CarrierWave 的组件,你需要配合 CarrierWave 一起使用,如果你需要直接用 Aliyun OSS,可以尝试用 [aliyun-sdk](https://github.com/aliyun/aliyun-oss-ruby-sdk) 这个 Gem。
8
8
 
@@ -3,12 +3,11 @@
3
3
  module CarrierWave
4
4
  module Aliyun
5
5
  class Bucket
6
- PATH_PREFIX = %r{^/}
6
+ PATH_PREFIX = %r{^/}.freeze
7
7
  CHUNK_SIZE = 1024 * 1024
8
8
 
9
- attr_reader :access_key_id, :access_key_secret, :bucket, :region, :mode, :host
10
-
11
- attr_reader :endpoint, :img_endpoint, :upload_endpoint
9
+ attr_reader :access_key_id, :access_key_secret, :bucket, :region, :mode, :host, :endpoint, :upload_endpoint,
10
+ :get_endpoint
12
11
 
13
12
  def initialize(uploader)
14
13
  if uploader.aliyun_area.present?
@@ -16,7 +15,7 @@ module CarrierWave
16
15
  uploader.aliyun_region ||= uploader.aliyun_area
17
16
  end
18
17
 
19
- if uploader.aliyun_private_read != nil
18
+ unless uploader.aliyun_private_read.nil?
20
19
  ActiveSupport::Deprecation.warn(%(config.aliyun_private_read will deprecation in carrierwave-aliyun 1.1.0, please use `aliyun_mode = :private` instead.))
21
20
  uploader.aliyun_mode ||= uploader.aliyun_private_read ? :private : :public
22
21
  end
@@ -38,15 +37,15 @@ module CarrierWave
38
37
  @mode = (uploader.aliyun_mode || :public).to_sym
39
38
 
40
39
  # Host for get request
41
- @host = uploader.aliyun_host || "https://#{self.bucket}.oss-#{self.region}.aliyuncs.com"
40
+ @endpoint = "https://#{bucket}.oss-#{region}.aliyuncs.com"
41
+ @host = uploader.aliyun_host || @endpoint
42
42
 
43
43
  unless @host.include?("//")
44
- raise "config.aliyun_host requirement include // http:// or https://, but you give: #{self.host}"
44
+ raise "config.aliyun_host requirement include // http:// or https://, but you give: #{host}"
45
45
  end
46
46
 
47
- @endpoint = "https://oss-#{self.region}.aliyuncs.com"
48
- @upload_endpoint = uploader.aliyun_internal == true ? "https://oss-#{self.region}-internal.aliyuncs.com" : @endpoint
49
- @img_endpoint = "https://img-#{self.region}.aliyuncs.com"
47
+ @get_endpoint = "https://oss-#{region}.aliyuncs.com"
48
+ @upload_endpoint = uploader.aliyun_internal == true ? "https://oss-#{region}-internal.aliyuncs.com" : "https://oss-#{region}.aliyuncs.com"
50
49
  end
51
50
 
52
51
  # 上传文件
@@ -70,7 +69,7 @@ module CarrierWave
70
69
  stream << file.read(CHUNK_SIZE) until file.eof?
71
70
  end
72
71
  path_to_url(path)
73
- rescue => e
72
+ rescue StandardError => e
74
73
  raise "Put file failed: #{e}"
75
74
  end
76
75
  end
@@ -95,7 +94,7 @@ module CarrierWave
95
94
  end
96
95
 
97
96
  [obj, chunk_buff.join("")]
98
- rescue => e
97
+ rescue StandardError => e
99
98
  raise "Get content faild: #{e}"
100
99
  end
101
100
 
@@ -110,34 +109,36 @@ module CarrierWave
110
109
  path = path.sub(PATH_PREFIX, "")
111
110
  oss_upload_client.delete_object(path)
112
111
  path_to_url(path)
113
- rescue => e
112
+ rescue StandardError => e
114
113
  raise "Delete failed: #{e}"
115
114
  end
116
115
 
117
116
  ##
118
117
  # 根据配置返回完整的上传文件的访问地址
119
118
  def path_to_url(path, thumb: nil)
120
- path = path.sub(PATH_PREFIX, "")
121
-
122
- if thumb
123
- [self.host, [path, thumb].join("")].join("/")
124
- else
125
- [self.host, path].join("/")
126
- end
119
+ get_url(path, thumb: thumb)
127
120
  end
128
121
 
129
122
  # 私有空间访问地址,会带上实时算出的 token 信息
130
123
  # 有效期 15 minutes
131
124
  def private_get_url(path, thumb: nil)
125
+ get_url(path, private: true, thumb: thumb)
126
+ end
127
+
128
+ def get_url(path, private: false, thumb: nil)
132
129
  path = path.sub(PATH_PREFIX, "")
133
130
 
134
- url = if thumb
135
- img_client.object_url([path, thumb].join(""), expiry: 15.minutes)
131
+ url = if thumb&.start_with?("?")
132
+ # foo.jpg?x-oss-process=image/resize,h_100
133
+ parameters = { "x-oss-process" => thumb.split("=").last }
134
+ oss_client.object_url(path, private, 15.minutes, parameters)
136
135
  else
137
- oss_client.object_url(path, expiry: 15.minutes)
136
+ oss_client.object_url(path, private, 15.minutes)
138
137
  end
139
138
 
140
- url.sub("http://", "https://")
139
+ url = [url, thumb].join("") if !private && !thumb&.start_with?("?")
140
+
141
+ url.sub(endpoint, host)
141
142
  end
142
143
 
143
144
  def head(path)
@@ -145,28 +146,28 @@ module CarrierWave
145
146
  oss_upload_client.get_object(path)
146
147
  end
147
148
 
149
+ # list_objects for test
150
+ def list_objects(opts = {})
151
+ oss_client.list_objects(opts)
152
+ end
153
+
148
154
  private
149
155
 
150
- def oss_client
151
- return @oss_client if defined?(@oss_client)
152
- client = ::Aliyun::OSS::Client.new(endpoint: self.endpoint,
153
- access_key_id: self.access_key_id, access_key_secret: self.access_key_secret)
154
- @oss_client = client.get_bucket(self.bucket)
155
- end
156
+ def oss_client
157
+ return @oss_client if defined?(@oss_client)
156
158
 
157
- def img_client
158
- return @img_client if defined?(@img_client)
159
- client = ::Aliyun::OSS::Client.new(endpoint: self.img_endpoint,
160
- access_key_id: self.access_key_id, access_key_secret: self.access_key_secret)
161
- @img_client = client.get_bucket(self.bucket)
162
- end
159
+ client = ::Aliyun::OSS::Client.new(endpoint: get_endpoint, access_key_id: access_key_id,
160
+ access_key_secret: access_key_secret)
161
+ @oss_client = client.get_bucket(bucket)
162
+ end
163
163
 
164
- def oss_upload_client
165
- return @oss_upload_client if defined?(@oss_upload_client)
166
- client = ::Aliyun::OSS::Client.new(endpoint: self.upload_endpoint,
167
- access_key_id: self.access_key_id, access_key_secret: self.access_key_secret)
168
- @oss_upload_client = client.get_bucket(self.bucket)
169
- end
164
+ def oss_upload_client
165
+ return @oss_upload_client if defined?(@oss_upload_client)
166
+
167
+ client = ::Aliyun::OSS::Client.new(endpoint: upload_endpoint, access_key_id: access_key_id,
168
+ access_key_secret: access_key_secret)
169
+ @oss_upload_client = client.get_bucket(bucket)
170
+ end
170
171
  end
171
172
  end
172
173
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module CarrierWave
4
4
  module Aliyun
5
- VERSION = "1.1.1"
5
+ VERSION = "1.2.2"
6
6
  end
7
7
  end
@@ -37,22 +37,11 @@ module CarrierWave
37
37
  # do nothing, because there's no such things as 'empty directory'
38
38
  end
39
39
 
40
- def clean_cache!(_seconds)
41
- will_remove_keys = []
42
- bucket.list_objects(prefix: uploader.cache_path).each do |file|
43
- next unless file.is_a?(Object)
44
- time = file.key.scan(/(\d+)-\d+-\d+(?:-\d+)?/).first.map { |t| t.to_i }
45
- time = Time.at(*time)
46
- will_remove_keys << item.key if time < (Time.now.utc - seconds)
47
- end
48
- bucket.batch_delete_objects(will_remove_keys)
49
- end
50
-
51
40
  private
52
41
 
53
- def bucket
54
- @bucket ||= CarrierWave::Aliyun::Bucket.new(uploader)
55
- end
42
+ def bucket
43
+ @bucket ||= CarrierWave::Aliyun::Bucket.new(uploader)
44
+ end
56
45
  end
57
46
  end
58
47
  end
@@ -3,13 +3,26 @@
3
3
  module CarrierWave
4
4
  module Storage
5
5
  class AliyunFile
6
+ attr_writer :file
6
7
  attr_reader :uploader, :path
7
8
 
8
- alias_method :filename, :path
9
- alias_method :identifier, :filename
9
+ alias filename path
10
+ alias identifier filename
10
11
 
11
12
  def initialize(uploader, base, path)
12
- @uploader, @path, @base = uploader, URI.encode(path), base
13
+ @uploader = uploader
14
+ @path = path
15
+ @base = base
16
+ end
17
+
18
+ def file
19
+ @file ||= bucket.get(path).try(:first)
20
+ end
21
+
22
+ def size
23
+ file.headers[:content_length].to_i
24
+ rescue StandardError
25
+ nil
13
26
  end
14
27
 
15
28
  def read
@@ -21,7 +34,7 @@ module CarrierWave
21
34
  def delete
22
35
  bucket.delete(path)
23
36
  true
24
- rescue => e
37
+ rescue StandardError => e
25
38
  # If the file's not there, don't panic
26
39
  puts "carrierwave-aliyun delete file failed: #{e}"
27
40
  nil
@@ -34,9 +47,9 @@ module CarrierWave
34
47
  #
35
48
  def url(opts = {})
36
49
  if bucket.mode == :private
37
- bucket.private_get_url(path, opts)
50
+ bucket.private_get_url(path, **opts)
38
51
  else
39
- bucket.path_to_url(path, opts)
52
+ bucket.path_to_url(path, **opts)
40
53
  end
41
54
  end
42
55
 
@@ -53,7 +66,7 @@ module CarrierWave
53
66
  new_file.copy_to(path)
54
67
  else
55
68
  fog_file = new_file.to_file
56
- bucket.put(path, fog_file, headers)
69
+ bucket.put(path, fog_file, **headers)
57
70
  fog_file.close if fog_file && !fog_file.closed?
58
71
  end
59
72
  true
@@ -82,7 +95,8 @@ module CarrierWave
82
95
 
83
96
  def original_filename
84
97
  return @original_filename if @original_filename
85
- if @file && @file.respond_to?(:original_filename)
98
+
99
+ if @file&.respond_to?(:original_filename)
86
100
  @file.original_filename
87
101
  elsif path
88
102
  ::File.basename(path)
@@ -91,9 +105,9 @@ module CarrierWave
91
105
 
92
106
  private
93
107
 
94
- def bucket
95
- @bucket ||= CarrierWave::Aliyun::Bucket.new(uploader)
96
- end
108
+ def bucket
109
+ @bucket ||= CarrierWave::Aliyun::Bucket.new(uploader)
110
+ end
97
111
  end
98
112
  end
99
113
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave-aliyun
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-12 00:00:00.000000000 Z
11
+ date: 2021-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carrierwave
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.6.0
33
+ version: 0.7.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.6.0
40
+ version: 0.7.0
41
41
  description: Aliyun OSS support for Carrierwave
42
42
  email:
43
43
  - huacnlee@gmail.com
@@ -57,7 +57,7 @@ homepage: https://github.com/huacnlee/carrierwave-aliyun
57
57
  licenses:
58
58
  - MIT
59
59
  metadata: {}
60
- post_install_message:
60
+ post_install_message:
61
61
  rdoc_options: []
62
62
  require_paths:
63
63
  - lib
@@ -72,8 +72,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  requirements: []
75
- rubygems_version: 3.0.3
76
- signing_key:
75
+ rubygems_version: 3.2.3
76
+ signing_key:
77
77
  specification_version: 4
78
78
  summary: Aliyun OSS support for Carrierwave
79
79
  test_files: []