carrierwave-aliyun 0.2.0 → 0.2.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
  SHA1:
3
- metadata.gz: fbbd6d9b648b70321516cf2719ed5561f0eeed67
4
- data.tar.gz: 50993ea58483e6b9ef829b10189bfb372b9350b1
3
+ metadata.gz: 26578c252fe9854ba9c649f43f34085a9e08d8a9
4
+ data.tar.gz: 4aa49c1451a5552aa9918bc5482bbfbc143e329f
5
5
  SHA512:
6
- metadata.gz: 1f080757c46c13e1d5b9a704131c507711cc72d99fb29b011ea0bf919fefec62f1a236b924a6792da473fe9d47f7ddfa829ba59b3b11cb1150e8a93a80f9cb69
7
- data.tar.gz: 8e5a6bc22996c840400830e544f93c912041d5efcf40071a1307320062d7f7a9db4e793dcd2a66388249552f0ff20d0904ed188bc32af398f930d9e24b3fc52d
6
+ metadata.gz: b0ed5151b787618e4496807b065ec493c3a60e141ac7286d9eab5acdbd8c1fa74197b328867243daa62979defd237642a518fd97b9fa2f06eb2aa9aab3dcdb4a
7
+ data.tar.gz: 6a4a619a5e131a94bc2a4b3e1c8e12eeb26143a074227b3d9ff59f8425a71f00a3e6e602cfa5e14a0159b1dbb7c53e223a06d1b1ca21d75e02faf7450403d97c
data/Changelogs.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.2.1
2
+
3
+ * 避免计算上传文件的时候读取所有内容到内存,之前的做法对于大文件会耗费过多的内存;
4
+ * Carrierwave::Storage::Aliyum::Connection 的 put 方法接口变化,file 现在应该传一个 File 的实例。
5
+
1
6
  ## 0.2.0
2
7
 
3
8
  * Aliyun OSS 新的[三级域名规则支持](http://bbs.aliyun.com/read.php?tid=139226) by [chaixl](https://github.com/chaixl)
@@ -15,6 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  s.require_paths = ["lib"]
18
+ s.license = 'MIT'
18
19
 
19
20
  s.add_dependency "carrierwave", [">= 0.5.7"]
20
21
  s.add_dependency "rest-client", [">= 1.6.7"]
@@ -1,7 +1,7 @@
1
1
  module CarrierWave
2
2
  module Aliyun
3
3
  class Version
4
- MAJOR, MINOR, PATCH = 0, 2, 0
4
+ MAJOR, MINOR, PATCH = 0, 2, 1
5
5
 
6
6
  ##
7
7
  # Returns the major version ( big release based off of multiple minor releases )
@@ -8,7 +8,7 @@ require 'uri'
8
8
  module CarrierWave
9
9
  module Storage
10
10
  class Aliyun < Abstract
11
-
11
+
12
12
  class Connection
13
13
  def initialize(options={})
14
14
  @aliyun_access_id = options[:aliyun_access_id]
@@ -23,26 +23,47 @@ module CarrierWave
23
23
  @aliyun_host = options[:aliyun_host] || "#{@aliyun_bucket}.oss.aliyuncs.com"
24
24
  end
25
25
 
26
- def put(path, file_data, options={})
26
+ =begin rdoc
27
+ 上传文件
28
+
29
+ == 参数:
30
+ - path - remote 存储路径
31
+ - file - 需要上传文件的 File 对象
32
+ - options:
33
+ - content_type - 上传文件的 MimeType,默认 `image/jpg`
34
+
35
+ == 返回值:
36
+ 图片的下载地址
37
+ =end
38
+ def put(path, file, options={})
27
39
  path = format_path(path)
28
40
  bucket_path = get_bucket_path(path)
29
- content_md5 = Digest::MD5.hexdigest(file_data)
41
+ content_md5 = Digest::MD5.file(file)
30
42
  content_type = options[:content_type] || "image/jpg"
31
43
  date = gmtdate
32
44
  url = path_to_url(path)
33
45
  auth_sign = sign("PUT", bucket_path, content_md5, content_type,date)
34
46
  headers = {
35
- "Authorization" => auth_sign,
47
+ "Authorization" => auth_sign,
36
48
  "Content-Type" => content_type,
37
- "Content-Length" => file_data.length,
49
+ "Content-Length" => file.size,
38
50
  "Date" => date,
39
51
  "Host" => @aliyun_upload_host,
40
52
  "Expect" => "100-Continue"
41
53
  }
42
- RestClient.put(URI.encode(url), file_data, headers)
54
+ RestClient.put(URI.encode(url), file, headers)
43
55
  return path_to_url(path, :get => true)
44
56
  end
45
-
57
+
58
+ =begin rdoc
59
+ 删除 Remote 的文件
60
+
61
+ == 参数:
62
+ - path - remote 存储路径
63
+
64
+ == 返回值:
65
+ 图片的下载地址
66
+ =end
46
67
  def delete(path)
47
68
  path = format_path(path)
48
69
  bucket_path = get_bucket_path(path)
@@ -56,22 +77,26 @@ module CarrierWave
56
77
  RestClient.delete(URI.encode(url), headers)
57
78
  return path_to_url(path, :get => true)
58
79
  end
59
-
80
+
81
+ ##
82
+ # 阿里云需要的 GMT 时间格式
60
83
  def gmtdate
61
84
  Time.now.gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
62
85
  end
63
-
86
+
64
87
  def format_path(path)
65
88
  return "" if path.blank?
66
89
  path.gsub!(/^\//,"")
67
-
90
+
68
91
  path
69
92
  end
70
93
 
71
94
  def get_bucket_path(path)
72
95
  [@aliyun_bucket,path].join("/")
73
96
  end
74
-
97
+
98
+ ##
99
+ # 根据配置返回完整的上传文件的访问地址
75
100
  def path_to_url(path, opts = {})
76
101
  if opts[:get]
77
102
  "http://#{@aliyun_host}/#{path}"
@@ -80,10 +105,10 @@ module CarrierWave
80
105
  end
81
106
  end
82
107
 
83
- private
108
+ private
84
109
  def sign(verb, path, content_md5 = '', content_type = '', date)
85
110
  canonicalized_oss_headers = ''
86
- canonicalized_resource = "/#{path}"
111
+ canonicalized_resource = "/#{path}"
87
112
  string_to_sign = "#{verb}\n\n#{content_type}\n#{date}\n#{canonicalized_oss_headers}#{canonicalized_resource}"
88
113
  digest = OpenSSL::Digest::Digest.new('sha1')
89
114
  h = OpenSSL::HMAC.digest(digest, @aliyun_access_key, string_to_sign)
@@ -140,8 +165,8 @@ module CarrierWave
140
165
  oss_connection.path_to_url(@path, :get => true)
141
166
  end
142
167
 
143
- def store(data, opts = {})
144
- oss_connection.put(@path, data, opts)
168
+ def store(file, opts = {})
169
+ oss_connection.put(@path, file, opts)
145
170
  end
146
171
 
147
172
  private
@@ -156,22 +181,22 @@ module CarrierWave
156
181
 
157
182
  def oss_connection
158
183
  return @oss_connection if @oss_connection
159
-
184
+
160
185
  config = {
161
- :aliyun_access_id => @uploader.aliyun_access_id,
162
- :aliyun_access_key => @uploader.aliyun_access_key,
186
+ :aliyun_access_id => @uploader.aliyun_access_id,
187
+ :aliyun_access_key => @uploader.aliyun_access_key,
163
188
  :aliyun_bucket => @uploader.aliyun_bucket,
164
189
  :aliyun_internal => @uploader.aliyun_internal,
165
190
  :aliyun_host => @uploader.aliyun_host
166
191
  }
167
192
  @oss_connection ||= CarrierWave::Storage::Aliyun::Connection.new(config)
168
193
  end
169
-
194
+
170
195
  end
171
-
196
+
172
197
  def store!(file)
173
198
  f = CarrierWave::Storage::Aliyun::File.new(uploader, self, uploader.store_path)
174
- f.store(file.read, :content_type => file.content_type)
199
+ f.store(::File.open(file.file), :content_type => file.content_type)
175
200
  f
176
201
  end
177
202
 
data/spec/aliyun_spec.rb CHANGED
@@ -13,12 +13,12 @@ describe "Aliyun" do
13
13
  end
14
14
 
15
15
  it "should put" do
16
- url = @connection.put("a/a.jpg",load_file("foo.jpg").read)
16
+ url = @connection.put("a/a.jpg",load_file("foo.jpg"))
17
17
  Net::HTTP.get_response(URI.parse(url)).code.should == "200"
18
18
  end
19
19
 
20
20
  it "should put with / prefix" do
21
- url = @connection.put("/a/a.jpg",load_file("foo.jpg").read)
21
+ url = @connection.put("/a/a.jpg",load_file("foo.jpg"))
22
22
  Net::HTTP.get_response(URI.parse(url)).code.should == "200"
23
23
  end
24
24
 
@@ -28,14 +28,14 @@ describe "Aliyun" do
28
28
  end
29
29
 
30
30
  it "should use default domain" do
31
- url = @connection.put("a/a.jpg",load_file("foo.jpg").read)
31
+ url = @connection.put("a/a.jpg",load_file("foo.jpg"))
32
32
  url.should == "http://#{ALIYUN_BUCKET}.oss.aliyuncs.com/a/a.jpg"
33
33
  end
34
34
 
35
35
  it "should support custom domain" do
36
36
  @opts[:aliyun_host] = "foo.bar.com"
37
37
  @connection = CarrierWave::Storage::Aliyun::Connection.new(@opts)
38
- url = @connection.put("a/a.jpg",load_file("foo.jpg").read)
38
+ url = @connection.put("a/a.jpg",load_file("foo.jpg"))
39
39
  url.should == "http://foo.bar.com/a/a.jpg"
40
40
  end
41
41
  end
data/spec/spec_helper.rb CHANGED
@@ -24,9 +24,9 @@ end
24
24
  ActiveRecord::Migration.verbose = false
25
25
 
26
26
  # 测试的时候需要修改这个地方
27
- ALIYUN_ACCESS_ID = "7ewl4zm3mhi45vko9zx022ul"
28
- ALIYUN_ACCESS_KEY = 'Ajpi7IRKDKdXYHHFFoS89uQJQE8='
29
- ALIYUN_BUCKET = "carrierwave"
27
+ ALIYUN_ACCESS_ID = "osOXJ5VeQVgDLMs3"
28
+ ALIYUN_ACCESS_KEY = 'm2LSEotGzDFrtHLeG1e6OATUTQ5ypR'
29
+ ALIYUN_BUCKET = "bison-dev"
30
30
 
31
31
  CarrierWave.configure do |config|
32
32
  config.storage = :aliyun
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: 0.2.0
4
+ version: 0.2.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: 2013-07-31 00:00:00.000000000 Z
11
+ date: 2013-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carrierwave
@@ -62,7 +62,8 @@ files:
62
62
  - spec/spec_helper.rb
63
63
  - spec/upload_spec.rb
64
64
  homepage: https://github.com/huacnlee/carrierwave-aliyun
65
- licenses: []
65
+ licenses:
66
+ - MIT
66
67
  metadata: {}
67
68
  post_install_message:
68
69
  rdoc_options: []
@@ -91,3 +92,4 @@ test_files:
91
92
  - spec/foo.zip
92
93
  - spec/spec_helper.rb
93
94
  - spec/upload_spec.rb
95
+ has_rdoc: