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
73 74 75 76 77 78 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 73 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: 图片的下载地址
102 103 104 105 106 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 102 def delete(path) path = path.sub(PATH_PREFIX, "") oss_upload_client.delete_object(path) path_to_url(path) end |
#get(path) ⇒ Object
读取文件 params:
-
path - remote 存储路径
returns: file data
85 86 87 88 89 90 91 92 93 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 85 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("")] end |
#get_url(path, private: false, thumb: nil) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 120 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
136 137 138 139 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 136 def head(path) path = path.sub(PATH_PREFIX, "") oss_upload_client.get_object(path) end |
#list_objects(opts = {}) ⇒ Object
list_objects for test
142 143 144 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 142 def list_objects(opts = {}) oss_client.list_objects(opts) end |
#path_to_url(path, thumb: nil) ⇒ Object
根据配置返回完整的上传文件的访问地址
110 111 112 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 110 def path_to_url(path, thumb: nil) get_url(path, thumb: thumb) end |
#private_get_url(path, thumb: nil) ⇒ Object
私有空间访问地址,会带上实时算出的 token 信息 有效期 15 minutes
116 117 118 |
# File 'lib/carrierwave/aliyun/bucket.rb', line 116 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 |
# 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 oss_upload_client.put_object(path, headers: headers) do |stream| stream << file.read(CHUNK_SIZE) until file.eof? end path_to_url(path) end |