Method: COS::Bucket#upload_all

Defined in:
lib/cos/bucket.rb

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

Note:

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

批量上传目录下的全部文件(不包含子目录)

Examples:

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

Parameters:

  • 目录路径或目录对象COSDir 目录路径如: ‘/’, ‘path1’, ‘path1/path2’, sdk会补齐末尾的 ‘/’

  • 本地文件夹路径

  • (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:

  • 服务端异常返回



278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/cos/bucket.rb', line 278

def upload_all(path_or_dir, file_src_path, options = {}, &block)
  local_path = Util.get_local_path(file_src_path, true)
  uploaded   = []

  Dir.foreach(local_path) do |file|

    if !file.start_with?('.') and !file.end_with?('.cpt') and !File.directory?(file)
      logger.info("Begin to upload file >> #{file}")

      begin
        # 逐个上传
        uploaded << upload(path_or_dir, file, "#{local_path}/#{file}", options, &block)
      rescue => error
        # 跳过错误
        if options[:skip_error]
          logger.info("#{file} error skipped")
          next
        else
          # 终止上传抛出异常
          raise error
        end
      end

      logger.info("#{file} upload finished")
    end

  end

  uploaded
end