docs: function uploadFiles(params, callback) {
      var self = this;
  
      // 判断多大的文件使用分片上传
      var SliceSize = params.SliceSize === undefined ? self.options.SliceSize : params.SliceSize;
  
      // 汇总返回进度
      var TotalSize = 0;
      var TotalFinish = 0;
      var onTotalProgress = util.throttleOnProgress.call(self, TotalFinish, params.onProgress);
  
      // 汇总返回回调
      var unFinishCount = params.files.length;
      var _onTotalFileFinish = params.onFileFinish;
      var resultList = Array(unFinishCount);
      var onTotalFileFinish = function (err, data, options) {
          onTotalProgress(null, true);
          _onTotalFileFinish && _onTotalFileFinish(err, data, options);
          resultList[options.Index] = {
              options: options,
              error: err,
              data: data
          };
          if (--unFinishCount <= 0 && callback) {
              callback(null, {
                  files: resultList,
              });
          }
      };
  
      // 开始处理每个文件
      var taskList = [];
      var count = params.files.length;
      util.each(params.files, function (fileParams, index) {
          fs.stat(fileParams.FilePath, function (err, stat) {
  
              var FileSize = fileParams.ContentLength = stat.size || 0;
              var fileInfo = {Index: index, TaskId: ''};
  
              // 更新文件总大小
              TotalSize += FileSize;
  
              // 整理 option，用于返回给回调
              util.each(fileParams, function (v, k) {
                  if (typeof v !== 'object' && typeof v !== 'function') {
                      fileInfo[k] = v;
                  }
              });
  
              // 处理单个文件 TaskReady
              var _onTaskReady = fileParams.onTaskReady;
              var onTaskReady = function (tid) {
                  fileInfo.TaskId = tid;
                  _onTaskReady && _onTaskReady(tid);
              };
              fileParams.onTaskReady = onTaskReady;
  
              // 处理单个文件进度
              var PreAddSize = 0;
              var _onProgress = fileParams.onProgress;
              var onProgress = function (info) {
                  TotalFinish = TotalFinish - PreAddSize + info.loaded;
                  PreAddSize = info.loaded;
                  _onProgress && _onProgress(info);
                  onTotalProgress({loaded: TotalFinish, total: TotalSize});
              };
              fileParams.onProgress = onProgress;
  
              // 处理单个文件完成
              var _onFileFinish = fileParams.onFileFinish;
              var onFileFinish = function (err, data) {
                  _onFileFinish && _onFileFinish(err, data);
                  onTotalFileFinish && onTotalFileFinish(err, data, fileInfo);
              };
  
              // 添加上传任务
              var api = FileSize >= SliceSize ? 'sliceUploadFile' : 'putObject';
              api === 'putObject' && (fileParams.Body = fs.createReadStream(fileParams.FilePath));
              taskList.push({
                  api: api,
                  params: fileParams,
                  callback: onFileFinish,
              });
              --count === 0 && self._addTasks(taskList);
          });
      });
  }