code: function _normalizeUploadParams(file, options, callback) {
      if (!file) {
          callback(new Error('The "file" parameter is empty.'))
          return
      }
  
      if (!(is.string(file) || is.buffer(file) || is.readableStream(file))) {
          callback(new Error('The "file" parameter is invalid, it must be a String, Buffer, or ReadableStream'))
          return
      }
  
      if (is.string(file)) {
          fs.stat(file, function(err, stats) {
              if (err || !stats) {
                  callback(new Error('File [' + file + '] is not exists!'))
                  return
              }
  
              options.size = stats.size
              if (!options.ext) {
                  options.ext = path.extname(file)
                  if (options.ext) {
                      // 去掉.
                      options.ext = options.ext.substring(1)
                  }
              }
              callback(null)
          })
          return
      }
  
      if (is.readableStream(file) && !options.size) {
          callback(new Error('when the "file" parameter\'s is ReadableStream, options.size must specified'))
          return
      }
  
      if (is.buffer(file)) {
          options.size = file.length
      }
  
      callback(null)
  }
docs: -------------- helpers 
  验证file参数是否合法，同时补充一些必要的参数
  若为String，则需验证是否存在
  若为ReadableStream，则需验证options.size是否存在
  @param file
  @param options
  @param callback
  @private