upload method
      
Future<TransferTask> 
upload(
    
    
- String bucket,
- String cosPath, {
- String? region,
- String? filePath,
- Uint8List? byteArr,
- String? uploadId,
- String? stroageClass,
- int? trafficLimit,
- String? callbackParam,
- Map<String, String> ? customHeaders,
- List<String?> ? noSignHeaders,
- ResultListener? resultListener,
- StateCallBack? stateCallback,
- ProgressCallBack? progressCallBack,
- InitMultipleUploadCallback? initMultipleUploadCallback,
- SessionQCloudCredentials? sessionCredentials,
Implementation
Future<TransferTask> upload(String bucket, String cosPath,
    {String? region,
    String? filePath,
    Uint8List? byteArr,
    String? uploadId,
    String? stroageClass,
    int? trafficLimit,
    String? callbackParam,
    Map<String, String>? customHeaders,
    List<String?>? noSignHeaders,
    ResultListener? resultListener,
    StateCallBack? stateCallback,
    ProgressCallBack? progressCallBack,
    InitMultipleUploadCallback? initMultipleUploadCallback,SessionQCloudCredentials? sessionCredentials, }) async {
  if (filePath == null && byteArr == null) {
    throw IllegalArgumentException("filePath or byteArr cannot be empty");
  }
  int? resultCallbackKey = _addResultListener(resultListener);
  int? stateCallbackKey = _addStateCallBack(stateCallback);
  int? progressCallbackKey = _addProgressCallBack(progressCallBack);
  int? initMultipleUploadCallbackKey = _addInitMultipleUploadCallback(initMultipleUploadCallback);
  String taskId = await _transferApi.upload(
      _transferKey,
      bucket,
      cosPath,
      region,
      filePath,
      byteArr,
      uploadId,
      stroageClass,
      trafficLimit,
      callbackParam,
      customHeaders,
      noSignHeaders,
      resultCallbackKey,
      stateCallbackKey,
      progressCallbackKey,
      initMultipleUploadCallbackKey,sessionCredentials);
  return TransferTask(_transferKey, taskId, _transferApi);
}