Class: CarrierWave::Aliyun::Bucket
- Inherits:
-
Object
- Object
- CarrierWave::Aliyun::Bucket
- Defined in:
- lib/carrierwave/aliyun/bucket.rb
Constant Summary collapse
- PATH_PREFIX =
%r{^/}.freeze
- CHUNK_SIZE =
1024 * 1024
Instance Attribute Summary collapse
-
#access_key_id ⇒ Object
readonly
Returns the value of attribute access_key_id.
-
#access_key_secret ⇒ Object
readonly
Returns the value of attribute access_key_secret.
-
#bucket ⇒ Object
readonly
Returns the value of attribute bucket.
-
#endpoint ⇒ Object
readonly
Returns the value of attribute endpoint.
-
#get_endpoint ⇒ Object
readonly
Returns the value of attribute get_endpoint.
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#mode ⇒ Object
readonly
Returns the value of attribute mode.
-
#region ⇒ Object
readonly
Returns the value of attribute region.
-
#upload_endpoint ⇒ Object
readonly
Returns the value of attribute upload_endpoint.
Instance Method Summary collapse
- #copy_object(source, dest) ⇒ Object
-
#delete(path) ⇒ Object
删除 Remote 的文件.
-
#get(path) ⇒ Object
读取文件 params: - path - remote 存储路径 returns: file data.
- #get_url(path, private: false, thumb: nil) ⇒ Object
- #head(path) ⇒ Object
-
#initialize(uploader) ⇒ Bucket
constructor
A new instance of Bucket.
-
#list_objects(opts = {}) ⇒ Object
list_objects for test.
-
#path_to_url(path, thumb: nil) ⇒ Object
根据配置返回完整的上传文件的访问地址.
-
#private_get_url(path, thumb: nil) ⇒ Object
私有空间访问地址,会带上实时算出的 token 信息 有效期 15 minutes.
-
#put(path, file, content_type: "image/jpg", content_disposition: nil) ⇒ Object
上传文件 params: - path - remote 存储路径 - file - 需要上传文件的 File 对象 - opts: - content_type - 上传文件的 MimeType,默认 ‘image/jpg` - content_disposition - Content-Disposition returns: 图片的下载地址.
Constructor Details
#initialize(uploader) ⇒ Bucket
Returns a new instance of Bucket.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 12 def initialize(uploader) if uploader.aliyun_area.present? ActiveSupport::Deprecation.warn("config.aliyun_area will deprecation in carrierwave-aliyun 1.1.0, please use `aliyun_region` instead.") uploader.aliyun_region ||= uploader.aliyun_area end unless uploader.aliyun_private_read.nil? ActiveSupport::Deprecation.warn(%(config.aliyun_private_read will deprecation in carrierwave-aliyun 1.1.0, please use `aliyun_mode = :private` instead.)) uploader.aliyun_mode ||= uploader.aliyun_private_read ? :private : :public end if uploader.aliyun_access_id.present? ActiveSupport::Deprecation.warn(%(config.aliyun_access_id will deprecation in carrierwave-aliyun 1.1.0, please use `aliyun_access_key_id` instead.)) uploader.aliyun_access_key_id ||= uploader.aliyun_access_id end if uploader.aliyun_access_key.present? ActiveSupport::Deprecation.warn(%(config.aliyun_access_key will deprecation in carrierwave-aliyun 1.1.0, please use `aliyun_access_key_secret` instead.)) uploader.aliyun_access_key_secret ||= uploader.aliyun_access_key end @access_key_id = uploader.aliyun_access_key_id @access_key_secret = uploader.aliyun_access_key_secret @bucket = uploader.aliyun_bucket @region = uploader.aliyun_region || "cn-hangzhou" @mode = (uploader.aliyun_mode || :public).to_sym # Host for get request @endpoint = "https://#{bucket}.oss-#{region}.aliyuncs.com" @host = uploader.aliyun_host || @endpoint unless @host.include?("//") raise "config.aliyun_host requirement include // http:// or https://, but you give: #{host}" end @get_endpoint = "https://oss-#{region}.aliyuncs.com" @upload_endpoint = uploader.aliyun_internal == true ? "https://oss-#{region}-internal.aliyuncs.com" : "https://oss-#{region}.aliyuncs.com" end |
Instance Attribute Details
#access_key_id ⇒ Object (readonly)
Returns the value of attribute access_key_id.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def access_key_id @access_key_id end |
#access_key_secret ⇒ Object (readonly)
Returns the value of attribute access_key_secret.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def access_key_secret @access_key_secret end |
#bucket ⇒ Object (readonly)
Returns the value of attribute bucket.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def bucket @bucket end |
#endpoint ⇒ Object (readonly)
Returns the value of attribute endpoint.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def endpoint @endpoint end |
#get_endpoint ⇒ Object (readonly)
Returns the value of attribute get_endpoint.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def get_endpoint @get_endpoint end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def host @host end |
#mode ⇒ Object (readonly)
Returns the value of attribute mode.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def mode @mode end |
#region ⇒ Object (readonly)
Returns the value of attribute region.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def region @region end |
#upload_endpoint ⇒ Object (readonly)
Returns the value of attribute upload_endpoint.
9 10 11 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 9 def upload_endpoint @upload_endpoint end |
Instance Method Details
#copy_object(source, dest) ⇒ Object
77 78 79 80 81 82 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 77 def copy_object(source, dest) source = source.sub(PATH_PREFIX, "") dest = dest.sub(PATH_PREFIX, "") oss_upload_client.copy_object(source, dest) end |
#delete(path) ⇒ Object
删除 Remote 的文件
params:
-
path - remote 存储路径
returns: 图片的下载地址
108 109 110 111 112 113 114 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 108 def delete(path) path = path.sub(PATH_PREFIX, "") oss_upload_client.delete_object(path) path_to_url(path) rescue StandardError => e raise "Delete failed: #{e}" end |
#get(path) ⇒ Object
读取文件 params:
-
path - remote 存储路径
returns: file data
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 89 def get(path) path = path.sub(PATH_PREFIX, "") chunk_buff = [] obj = oss_upload_client.get_object(path) do |chunk| chunk_buff << chunk end [obj, chunk_buff.join("")] rescue StandardError => e raise "Get content faild: #{e}" end |
#get_url(path, private: false, thumb: nil) ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 128 def get_url(path, private: false, thumb: nil) path = path.sub(PATH_PREFIX, "") url = if thumb&.start_with?("?") # foo.jpg?x-oss-process=image/resize,h_100 parameters = { "x-oss-process" => thumb.split("=").last } oss_client.object_url(path, private, 15.minutes, parameters) else oss_client.object_url(path, private, 15.minutes) end url = [url, thumb].join("") if !private && !thumb&.start_with?("?") url.sub(endpoint, host) end |
#head(path) ⇒ Object
144 145 146 147 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 144 def head(path) path = path.sub(PATH_PREFIX, "") oss_upload_client.get_object(path) end |
#list_objects(opts = {}) ⇒ Object
list_objects for test
150 151 152 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 150 def list_objects(opts = {}) oss_client.list_objects(opts) end |
#path_to_url(path, thumb: nil) ⇒ Object
根据配置返回完整的上传文件的访问地址
118 119 120 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 118 def path_to_url(path, thumb: nil) get_url(path, thumb: thumb) end |
#private_get_url(path, thumb: nil) ⇒ Object
私有空间访问地址,会带上实时算出的 token 信息 有效期 15 minutes
124 125 126 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 124 def private_get_url(path, thumb: nil) get_url(path, private: true, thumb: thumb) end |
#put(path, file, content_type: "image/jpg", content_disposition: nil) ⇒ Object
上传文件 params:
-
path - remote 存储路径
-
file - 需要上传文件的 File 对象
-
opts:
-
content_type - 上传文件的 MimeType,默认 ‘image/jpg`
-
content_disposition - Content-Disposition
-
returns: 图片的下载地址
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 60 def put(path, file, content_type: "image/jpg", content_disposition: nil) path = path.sub(PATH_PREFIX, "") headers = {} headers["Content-Type"] = content_type headers["Content-Disposition"] = content_disposition if content_disposition begin oss_upload_client.put_object(path, headers: headers) do |stream| stream << file.read(CHUNK_SIZE) until file.eof? end path_to_url(path) rescue StandardError => e raise "Put file failed: #{e}" end end |