carrierwave-aliyun 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f6d5d5c0acc30b46d90292f4a90c05e90667bdbf40ec97b279342aa215a4f2ff
4
- data.tar.gz: f3b67cdf10f5800c250dafce535a6df95951c6c967e825f18fc3a656fa35268f
3
+ metadata.gz: 876c53c7233505f4afc350bbf46e91c8a488d1842a74f4ee5802259d96468846
4
+ data.tar.gz: b32c6cc04411c9f5c3115e78b91a7902f3d2a4068cbb325316631363c709de34
5
5
  SHA512:
6
- metadata.gz: 4d0ba7b297d56905fdb8d24697e02e7ba56f89c0ea91ea7f73784746f404d2a7de2d0161c1a9b9b70c6e66050247ecc0828ce2396bccfa25ab24bd49ba11499c
7
- data.tar.gz: 9a6ee10ee4fb3299e9ef3170f1b4e41bc32d5137ee601295b2fed394cc060148f371835519db6af16bc5e6bf0f3be6164b4462b7fba202929505fe0d21562bf6
6
+ metadata.gz: 8b5211cab35612c46cb22c50816bc9846682cac9aaf14ce293229201550df03c773fde7b843c3fcf6ab0eb1500a14cf7cd0866183be525c10d12dbb26ae4c08b
7
+ data.tar.gz: a3c1233546856b1fcc834810753bf4390f49dce8c8d9301b77e6096bc77a932280b83c386cf107c981053fefcefb5c1c103e069e1993362cd3937a18d33ef505
@@ -1,3 +1,7 @@
1
+ ## 1.1.1
2
+
3
+ - 对于 CarrierWave 的 cache 机制正确支持;
4
+
1
5
  ## 1.1.0
2
6
 
3
7
  - 支持 CarrierWave 2.0;
@@ -75,6 +75,13 @@ module CarrierWave
75
75
  end
76
76
  end
77
77
 
78
+ def copy_object(source, dest)
79
+ source = source.sub(PATH_PREFIX, "")
80
+ dest = dest.sub(PATH_PREFIX, "")
81
+
82
+ oss_upload_client.copy_object(source, dest)
83
+ end
84
+
78
85
  # 读取文件
79
86
  # params:
80
87
  # - path - remote 存储路径
@@ -134,7 +141,8 @@ module CarrierWave
134
141
  end
135
142
 
136
143
  def head(path)
137
- oss_client.get_object_meta(path)
144
+ path = path.sub(PATH_PREFIX, "")
145
+ oss_upload_client.get_object(path)
138
146
  end
139
147
 
140
148
  private
@@ -2,6 +2,6 @@
2
2
 
3
3
  module CarrierWave
4
4
  module Aliyun
5
- VERSION = "1.1.0"
5
+ VERSION = "1.1.1"
6
6
  end
7
7
  end
@@ -3,14 +3,14 @@
3
3
  module CarrierWave
4
4
  module Storage
5
5
  class Aliyun < Abstract
6
- def store!(file)
6
+ def store!(new_file)
7
7
  f = AliyunFile.new(uploader, self, uploader.store_path)
8
8
  headers = {
9
- content_type: file.content_type,
9
+ content_type: new_file.content_type,
10
10
  content_disposition: uploader.try(:content_disposition)
11
11
  }
12
12
 
13
- f.store(::File.open(file.file), headers)
13
+ f.store(new_file, headers)
14
14
  f
15
15
  end
16
16
 
@@ -18,19 +18,19 @@ module CarrierWave
18
18
  AliyunFile.new(uploader, self, uploader.store_path(identifier))
19
19
  end
20
20
 
21
- def cache!(file)
22
- f = AliyunFile.new(uploader, self, uploader.store_path)
21
+ def cache!(new_file)
22
+ f = AliyunFile.new(uploader, self, uploader.cache_path)
23
23
  headers = {
24
- content_type: file.content_type,
24
+ content_type: new_file.content_type,
25
25
  content_disposition: uploader.try(:content_disposition)
26
26
  }
27
27
 
28
- f.store(::File.open(file.file), headers)
28
+ f.store(new_file, headers)
29
29
  f
30
30
  end
31
31
 
32
32
  def retrieve_from_cache!(identifier)
33
- AliyunFile.new(uploader, self, uploader.store_path(identifier))
33
+ AliyunFile.new(uploader, self, uploader.cache_path(identifier))
34
34
  end
35
35
 
36
36
  def delete_dir!(path)
@@ -38,8 +38,21 @@ module CarrierWave
38
38
  end
39
39
 
40
40
  def clean_cache!(_seconds)
41
- raise 'use Object Lifecycle Management to clean the cache'
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)
42
49
  end
50
+
51
+ private
52
+
53
+ def bucket
54
+ @bucket ||= CarrierWave::Aliyun::Bucket.new(uploader)
55
+ end
43
56
  end
44
57
  end
45
58
  end
@@ -2,23 +2,24 @@
2
2
 
3
3
  module CarrierWave
4
4
  module Storage
5
- class AliyunFile < CarrierWave::SanitizedFile
6
- attr_reader :path
5
+ class AliyunFile
6
+ attr_reader :uploader, :path
7
+
8
+ alias_method :filename, :path
9
+ alias_method :identifier, :filename
7
10
 
8
11
  def initialize(uploader, base, path)
9
- @uploader = uploader
10
- @path = URI.encode(path)
11
- @base = base
12
+ @uploader, @path, @base = uploader, URI.encode(path), base
12
13
  end
13
14
 
14
15
  def read
15
- object, body = bucket.get(@path)
16
+ object, body = bucket.get(path)
16
17
  @headers = object.headers
17
18
  body
18
19
  end
19
20
 
20
21
  def delete
21
- bucket.delete(@path)
22
+ bucket.delete(path)
22
23
  true
23
24
  rescue => e
24
25
  # If the file's not there, don't panic
@@ -33,9 +34,9 @@ module CarrierWave
33
34
  #
34
35
  def url(opts = {})
35
36
  if bucket.mode == :private
36
- bucket.private_get_url(@path, opts)
37
+ bucket.private_get_url(path, opts)
37
38
  else
38
- bucket.path_to_url(@path, opts)
39
+ bucket.path_to_url(path, opts)
39
40
  end
40
41
  end
41
42
 
@@ -49,22 +50,49 @@ module CarrierWave
49
50
 
50
51
  def store(new_file, headers = {})
51
52
  if new_file.is_a?(self.class)
52
- new_file.move_to(path)
53
+ new_file.copy_to(path)
53
54
  else
54
- bucket.put(@path, new_file, headers)
55
+ fog_file = new_file.to_file
56
+ bucket.put(path, fog_file, headers)
57
+ fog_file.close if fog_file && !fog_file.closed?
55
58
  end
59
+ true
56
60
  end
57
61
 
58
62
  def headers
59
- @headers ||= {}
63
+ @headers ||= begin
64
+ obj = bucket.head(path)
65
+ obj.headers
66
+ end
67
+ end
68
+
69
+ def exists?
70
+ !!headers
71
+ end
72
+
73
+ def copy_to(new_path)
74
+ bucket.copy_object(path, new_path)
75
+ self.class.new(uploader, @base, new_path)
76
+ end
77
+
78
+ def extension
79
+ path_elements = path.split(".")
80
+ path_elements.last if path_elements.size > 1
81
+ end
82
+
83
+ def original_filename
84
+ return @original_filename if @original_filename
85
+ if @file && @file.respond_to?(:original_filename)
86
+ @file.original_filename
87
+ elsif path
88
+ ::File.basename(path)
89
+ end
60
90
  end
61
91
 
62
92
  private
63
93
 
64
94
  def bucket
65
- return @bucket if defined? @bucket
66
-
67
- @bucket = CarrierWave::Aliyun::Bucket.new(@uploader)
95
+ @bucket ||= CarrierWave::Aliyun::Bucket.new(uploader)
68
96
  end
69
97
  end
70
98
  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.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-20 00:00:00.000000000 Z
11
+ date: 2019-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carrierwave