Class: COS::COSDir

Inherits:
ResourceOperator show all
Defined in:
lib/cos/dir.rb

Overview

COS目录资源

Instance Attribute Summary

Attributes inherited from ResourceOperator

#type

Instance Method Summary collapse

Methods inherited from ResourceOperator

#created_at, #delete, #delete!, #exist?, #stat, #to_hash, #update, #updated_at

Methods included from Struct::Base::AttrHelper

#optional_attrs, #required_attrs

Constructor Details

#initialize(attrs = {}) ⇒ COS::COSDir

初始化

Parameters:

  • attrs (Hash) (defaults to: {})

    参数

Options Hash (attrs):

  • :bucket (Bucket)

    COS::Bucket对象

  • :path (String)

    存储路径

  • :name (String)

    文件名

  • :ctime (String)

    创建时间unix时间戳

  • :mtime (String)

    修改时间unix时间戳

  • :biz_attr (String)

    业务信息

  • :authority (String)

    bucket权限(根目录bucket)

  • :bucket_type (Integer)

    bucket类型(根目录bucket)

  • :migrate_source_domain (String)

    回源地址(根目录bucket)

  • :need_preview (String)

    need_preview(根目录bucket)

  • :refers (Array<String>)

    refers(根目录bucket)

Raises:


26
27
28
29
# File 'lib/cos/dir.rb', line 26

def initialize(attrs = {})
  super(attrs)
  @type = 'dir'
end

Instance Method Details

#countInteger Also known as: size

获取当前目录下的文件及子目录总数

Returns:

  • (Integer)

    文件及子目录总数

Raises:


266
267
268
# File 'lib/cos/dir.rb', line 266

def count
  bucket.count(path)
end

#count_dirsInteger

获取当前目录下的子目录数

Returns:

  • (Integer)

    子目录数

Raises:


286
287
288
# File 'lib/cos/dir.rb', line 286

def count_dirs
  bucket.count_dirs(path)
end

#count_filesInteger

获取当前目录下的文件数

Returns:

  • (Integer)

    文件数

Raises:


277
278
279
# File 'lib/cos/dir.rb', line 277

def count_files
  bucket.count_files(path)
end

#create_folder(dir_name, options = {}) ⇒ COS::COSDir Also known as: mkdir

在当前目录下创建子目录

Parameters:

  • options (Hash) (defaults to: {})

    高级参数

Options Hash (options):

  • :biz_attr (String)

    目录属性, 业务端维护

Returns:

Raises:


239
240
241
# File 'lib/cos/dir.rb', line 239

def create_folder(dir_name, options = {})
  bucket.create_folder("#{path}#{dir_name}", options)
end

#download_all(file_store_path, options = {}) {|Float| ... } ⇒ Array<String>

Note:

sdk会自动创建本地目录

批量下载当前目录中的所有文件(不含子目录)

Examples:

files = dir.download_all('~/test/') do |p|
  puts "下载进度: #{(p*100).round(2)}%")
end
puts files

Parameters:

  • file_store_path (String)

    本地文件存储目录

  • options (Hash) (defaults to: {})

    高级参数

Options Hash (options):

  • :min_slice_size (Integer)

    完整下载最小文件大小, 超过此大小将会使用分片多线程断点续传

  • :disable_mkdir (Integer)

    禁止自动创建本地文件夹, 默认会创建

  • :download_retry (Integer)

    下载重试次数, 默认10

  • :disable_cpt (Boolean)

    是否禁用checkpoint功能,如 果设置为true,则在下载的过程中不会写checkpoint文件,这意味着 下载失败后不能断点续传,而只能重新下载整个文件。如果这个值为 true,则:cpt_file会被忽略。

  • :threads (Integer)

    多线程下载线程数, 默认为10

  • :slice_size (Integer)

    设置分片下载时每个分片的大小 默认为5 MB。

  • :cpt_file (String)

    断点续传的checkpoint文件,如果 指定的cpt文件不存在,则会在file所在目录创建一个默认的cpt文件, 命名方式为:file.cpt,其中file是用户要下载的文件名。在下载的过 程中会不断更新此文件,成功完成下载后会删除此文件;如果指定的 cpt文件已存在,则从cpt文件中记录的点继续下载。

Yields:

  • (Float)

    下载进度百分比回调, 进度值是一个0-1之间的小数

Returns:

  • (Array<String>)

    本地文件路径数组

Raises:


146
147
148
# File 'lib/cos/dir.rb', line 146

def download_all(file_store_path, options = {}, &block)
  bucket.download_all(self, file_store_path, options, &block)
end

#empty?Boolean

判断当前目录是否是空的

Returns:

  • (Boolean)

    是否为空

Raises:


295
296
297
# File 'lib/cos/dir.rb', line 295

def empty?
  bucket.empty?(path) == 0
end

#hash_tree(options = {}) ⇒ Hash<Object>

获取当前目录Hash格式的目录树形结构, 可用于直接to_json

:resource => {name: '', mtime: ''...,
:children => [
  => resource, :children => [...],
  => resource, :children => [...],
  ...
]

}

Examples:

puts bucket.hash_tree.to_json

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :depth (Integer)

    子目录深度,默认为5

Returns:

  • (Hash<Object>)

Raises:


227
228
229
# File 'lib/cos/dir.rb', line 227

def hash_tree(options = {})
  bucket.hash_tree(self, options)
end

#list(options = {}) ⇒ Enumerator<Object> Also known as: ls

列出当前文件夹下的目录及文件

Examples:

all = dir.list
all.each do |o|
  if o.is_a?(COS::COSFile)
    puts "File: #{o.name} #{o.format_size}"
  else
    puts "Dir: #{o.name} #{o.created_at}"
  end
end

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :prefix (String)

    搜索前缀 如果填写prefix, 则列出含此前缀的所有文件及目录

  • :num (Integer)

    每页拉取的数量, 默认20条

  • :pattern (Symbol)

    获取方式 :dir_only 只获取目录, :file_only 只获取文件, 默认为 :both 全部获取

  • :order (Symbol)

    排序方式 :asc 正序, :desc 倒序 默认为 :asc

Returns:

  • (Enumerator<Object>)

    迭代器, 其中Object可能是COS::COSFile或COS::COSDir

Raises:


173
174
175
# File 'lib/cos/dir.rb', line 173

def list(options = {})
  bucket.list(path, options)
end

#list_count(options = {}) ⇒ Hash

获取当前目录下得文件和子目录总数信息

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :prefix (String)

    搜索前缀 如果填写prefix, 则计算含此前缀的所有文件及目录个数

Returns:

  • (Hash)
    • :total [Integer] 文件和目录总数

    • :files [Integer] 文件数

    • :dirs [Integer] 目录数

Raises:


257
258
259
# File 'lib/cos/dir.rb', line 257

def list_count(options = {})
  bucket.list_count(path, options)
end

#tree(options = {}) ⇒ Hash

获取当前目录树形结构

:resource => resource,
:children => [
  {:resource => resource, :children => [...],
  => resource, :children => [...],
  ...
]

}

Examples:

tree = dir.tree
puts tree[:resource].name
tree[:children].each do |r|
  puts r[:resource].name
end

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :depth (Integer)

    子目录深度,默认为5

Returns:

  • (Hash)

Raises:


203
204
205
# File 'lib/cos/dir.rb', line 203

def tree(options = {})
  bucket.tree(self, options)
end

#upload(file_name, file_src, options = {}) {|Float| ... } ⇒ COS::COSFile

在当前目录中上传文件,自动判断使用分片上传,断点续传及自动重试,多线程上传

Examples:

file = dir.upload('file1', '~/test/file1') do |p|
  puts "上传进度: #{(p*100).round(2)}%")
end
puts file.url

Parameters:

  • file_name (String)

    文件名

  • file_src (String)

    本地文件路径

  • options (Hash) (defaults to: {})

    高级参数

Options Hash (options):

  • :auto_create_folder (Boolean)

    自动创建远端目录

  • :min_slice_size (Integer)

    完整上传最小文件大小, 超过此大小将会使用分片多线程断点续传

  • :upload_retry (Integer)

    上传重试次数, 默认10

  • :biz_attr (String)

    目录属性, 业务端维护

  • :disable_cpt (Boolean)

    是否禁用checkpoint功能,如 果设置为true,则在上传的过程中不会写checkpoint文件,这意味着 上传失败后不能断点续传,而只能重新上传整个文件。如果这个值为 true,则:cpt_file会被忽略。

  • :threads (Integer)

    多线程上传线程数, 默认为10

  • :slice_size (Integer)

    设置分片上传时每个分片的大小 默认为3 MB, 目前服务端最大限制也为3MB。

  • :cpt_file (String)

    断点续传的checkpoint文件,如果 指定的cpt文件不存在,则会在file所在目录创建一个默认的cpt文件, 命名方式为:file.cpt,其中file是用户要上传的文件名。在上传的过 程中会不断更新此文件,成功完成上传后会删除此文件;如果指定的 cpt文件已存在,则从cpt文件中记录的点继续上传。

Yields:

  • (Float)

    上传进度百分比回调, 进度值是一个0-1之间的小数

Returns:

Raises:


65
66
67
# File 'lib/cos/dir.rb', line 65

def upload(file_name, file_src, options = {}, &block)
  bucket.upload(self, file_name, file_src, options, &block)
end

#upload_all(file_src_path, options = {}) {|Float| ... } ⇒ Array<COS::COSFile>

Note:

已存在的文件不会再次上传, 本地目录中的隐藏文件(已“.”开头的)不会上传 “.cpt”文件不会上传, 不会上传子目录

目录路径如: '/', 'path1', 'path1/path2', sdk会补齐末尾的 '/'

批量上传本地目录中的所有文件至此目录

Examples:

files = dir.upload_all('~/test') do |p|
  puts "上传进度: #{(p*100).round(2)}%")
end
files.each do |file|
  puts file.url
end

Parameters:

  • file_src_path (String)

    本地文件夹路径

  • options (Hash) (defaults to: {})

    高级参数

Options Hash (options):

  • :auto_create_folder (Boolean)

    自动创建远端目录

  • :min_slice_size (Integer)

    完整上传最小文件大小, 超过此大小将会使用分片多线程断点续传

  • :upload_retry (Integer)

    上传重试次数, 默认10

  • :biz_attr (String)

    目录属性, 业务端维护

  • :disable_cpt (Boolean)

    是否禁用checkpoint功能,如 果设置为true,则在上传的过程中不会写checkpoint文件,这意味着 上传失败后不能断点续传,而只能重新上传整个文件。如果这个值为 true,则:cpt_file会被忽略。

  • :threads (Integer)

    多线程上传线程数, 默认为10

  • :slice_size (Integer)

    设置分片上传时每个分片的大小 默认为3 MB, 目前服务端最大限制也为3MB。

  • :cpt_file (String)

    断点续传的checkpoint文件,如果 指定的cpt文件不存在,则会在file所在目录创建一个默认的cpt文件, 命名方式为:file.cpt,其中file是用户要上传的文件名。在上传的过 程中会不断更新此文件,成功完成上传后会删除此文件;如果指定的 cpt文件已存在,则从cpt文件中记录的点继续上传。

Yields:

  • (Float)

    上传进度百分比回调, 进度值是一个0-1之间的小数

Returns:

Raises:


108
109
110
# File 'lib/cos/dir.rb', line 108

def upload_all(file_src_path, options = {}, &block)
  bucket.upload_all(self, file_src_path, options, &block)
end