Procházet zdrojové kódy

Merge remote-tracking branch 'remotes/origin/F/0710_2.1+2.0'

胡佳骏 před 1 rokem
rodič
revize
93115f6f40
100 změnil soubory, kde provedl 6549 přidání a 25 odebrání
  1. 25 0
      Assets/2.0/Tools/DownLoadItem.cs
  2. 15 10
      Assets/2.0/Tools/HttpAction.cs
  3. 1 1
      Assets/2.0/Tools/MsgHandler.cs
  4. 14 14
      Assets/2.0/User/UserScene/UserSceneManager.cs
  5. 8 0
      Assets/COS.meta
  6. 8 0
      Assets/COS/COSXMLDemo.meta
  7. 12 0
      Assets/COS/COSXMLDemo/COSXMLDemo.csproj
  8. 7 0
      Assets/COS/COSXMLDemo/COSXMLDemo.csproj.meta
  9. 259 0
      Assets/COS/COSXMLDemo/Program.cs
  10. 11 0
      Assets/COS/COSXMLDemo/Program.cs.meta
  11. 8 0
      Assets/COS/QCloudCSharpSDK.meta
  12. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML.meta
  13. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Auth.meta
  14. 516 0
      Assets/COS/QCloudCSharpSDK/COSXML/Auth/IQCloudSigner.cs
  15. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Auth/IQCloudSigner.cs.meta
  16. 196 0
      Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentialProvider.cs
  17. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentialProvider.cs.meta
  18. 39 0
      Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentials.cs
  19. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentials.cs.meta
  20. 50 0
      Assets/COS/QCloudCSharpSDK/COSXML/COSXML-Netcore.csproj
  21. 7 0
      Assets/COS/QCloudCSharpSDK/COSXML/COSXML-Netcore.csproj.meta
  22. 692 0
      Assets/COS/QCloudCSharpSDK/COSXML/COSXML.csproj
  23. 7 0
      Assets/COS/QCloudCSharpSDK/COSXML/COSXML.csproj.meta
  24. 20 0
      Assets/COS/QCloudCSharpSDK/COSXML/COSXML.sln
  25. 7 0
      Assets/COS/QCloudCSharpSDK/COSXML/COSXML.sln.meta
  26. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common.meta
  27. 29 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosACL.cs
  28. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosACL.cs.meta
  29. 45 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosClientError.cs
  30. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosClientError.cs.meta
  31. 30 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosGrantPermission.cs
  32. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosGrantPermission.cs.meta
  33. 18 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosMetaDataDirective.cs
  34. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosMetaDataDirective.cs.meta
  35. 92 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestHeaderKey.cs
  36. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestHeaderKey.cs.meta
  37. 22 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestMethod.cs
  38. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestMethod.cs.meta
  39. 30 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosStorageClass.cs
  40. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosStorageClass.cs.meta
  41. 42 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosVersion.cs
  42. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Common/CosVersion.cs.meta
  43. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosException.meta
  44. 32 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosClientException.cs
  45. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosClientException.cs.meta
  46. 100 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosServerException.cs
  47. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosServerException.cs.meta
  48. 1216 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosXml.cs
  49. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosXml.cs.meta
  50. 345 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosXmlConfig.cs
  51. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosXmlConfig.cs.meta
  52. 1324 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosXmlServer.cs
  53. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/CosXmlServer.cs.meta
  54. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Listener.meta
  55. 51 0
      Assets/COS/QCloudCSharpSDK/COSXML/Listener/CosCallback.cs
  56. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Listener/CosCallback.cs.meta
  57. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log.meta
  58. 218 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/FileLogImpl.cs
  59. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/FileLogImpl.cs.meta
  60. 12 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/ILog.cs
  61. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/ILog.cs.meta
  62. 17 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/LogImpl.cs
  63. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/LogImpl.cs.meta
  64. 177 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/QLog.cs
  65. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Log/QLog.cs.meta
  66. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model.meta
  67. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket.meta
  68. 116 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/BucketRequest.cs
  69. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/BucketRequest.cs.meta
  70. 21 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSRequest.cs
  71. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSRequest.cs.meta
  72. 15 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSResult.cs
  73. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSResult.cs.meta
  74. 27 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryRequest.cs
  75. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryRequest.cs.meta
  76. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryResult.cs
  77. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryResult.cs.meta
  78. 22 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleRequest.cs
  79. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleRequest.cs.meta
  80. 15 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleResult.cs
  81. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleResult.cs.meta
  82. 21 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyRequest.cs
  83. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyRequest.cs.meta
  84. 14 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyResult.cs
  85. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyResult.cs.meta
  86. 18 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationRequest.cs
  87. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationRequest.cs.meta
  88. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationResult.cs
  89. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationResult.cs.meta
  90. 21 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketRequest.cs
  91. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketRequest.cs.meta
  92. 14 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketResult.cs
  93. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketResult.cs.meta
  94. 17 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingRequest.cs
  95. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingRequest.cs.meta
  96. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingResult.cs
  97. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingResult.cs.meta
  98. 17 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketWebsiteRequest.cs
  99. 11 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketWebsiteRequest.cs.meta
  100. 8 0
      Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketWebsiteResult.cs

+ 25 - 0
Assets/2.0/Tools/DownLoadItem.cs

@@ -236,6 +236,31 @@ public class DownLoadItem : MonoBehaviour
       
 
     }
+
+    public void DownloadFileMsg()
+    {
+        MsgHandler.AddListener(Application.persistentDataPath + "" + downLoadPath, HandleMsg);
+    }
+
+    private void HandleMsg(Msg msg)
+    {
+        if (msg.Value != null)
+        {
+            downLoadData = (byte[])msg.Value;
+            isDownLoad = true;
+            downLoadState = "下载成功";
+
+        }
+        else
+        {
+            isDownLoad = true;
+            downLoadState = "下载失败";
+        }
+        callback?.Invoke(isDownLoad);
+        MsgHandler.RemoveListener(Application.persistentDataPath + "" + downLoadPath, HandleMsg);
+
+    }
+
     Dictionary<string, string> requestHeader = new Dictionary<string, string>();  //  header
     public void initHead()
     {

+ 15 - 10
Assets/2.0/Tools/HttpAction.cs

@@ -9,32 +9,37 @@ public class HttpAction :Singleton<HttpAction>
     //  private string baseUrl = "http://office.ghz-tech.com:3425/guideSystem";
     public const string UrlPointCloud = "https://pro.qulivr.com/mr-navigator/v1";
     //private string token = "";
-    public const string baseurl = "http://office.ghz-tech.com:9904/api";
-    public const string baseurl20 = "https://office.ghz-tech.com:3424/api";
+   // public const string baseurl = "http://office.ghz-tech.com:9904/api";
+ //   public const string baseurl20 = "https://office.ghz-tech.com:3424/api";
     public const string baseurvideo = "https://office.ghz-tech.com:3424/";
 
-    //初始化场景
+    //public const string baseurl20 = "https://api-fat2.ghz-tech.com/mr-navigator/v1";
+    //public const string baseurl = "https://api-fat2.ghz-tech.com/mr-navigator/v1";
+
+    public const string baseurl20 = "https://api-fat2.ghz-tech.com/mr-navigator/v1";
+    public const string baseurl = "https://api-fat2.ghz-tech.com/mr-navigator/v1";
+    //鍒濆�鍖栧満鏅�
     public const string client_snInfo = "/client/snInfo";
 
     //public const string project_detail = "/project/detail";
-    //初始化景点 
+    //鍒濆�鍖栨櫙鐐� 
     public const string sn_init = "/sn/init";
-    //下载
+    //涓嬭浇
     public const string file_download = "/file/download";
 
-    //获取资源 
+    //鑾峰彇璧勬簮 
     public const string material_init = "/material/init";
 
-    //获取账号下场景id 
+    //鑾峰彇璐﹀彿涓嬪満鏅痠d 
     public const string project_init = "/project/index";
 
-    //保存景点位
+    //淇濆瓨鏅�偣浣�
     public const string viewpoint_update = "/viewpoint/update";
 
-    //电量
+    //鐢甸噺
     public const string sn_electricity = "/sn/electricity";
 
-    //识别的景点
+    //璇嗗埆鐨勬櫙鐐�
     public const string sn_viewpoint = "/sn/viewpoint";
 
 

+ 1 - 1
Assets/2.0/Tools/MsgHandler.cs

@@ -1,4 +1,4 @@
-using System.Collections;
+using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 

+ 14 - 14
Assets/2.0/User/UserScene/UserSceneManager.cs

@@ -8,27 +8,27 @@ public class UserSceneManager : XRTool.Util.Singleton<UserSceneManager>
 {
     public delegate void UserSceneInitEnd(bool b);
 
-    //ÏÂÔػص÷
+    //下载回调
     public UserSceneInitEnd callback;
 
     int max;
     int now;
 
-    //³¡¾°ÖеÄÄ£ÐÍ
+    //场景中的模型
     public Dictionary<string, UserSceneItem> SceneList = new Dictionary<string, UserSceneItem>();
-    //³õʼ»¯³¡¾°
+    //�始化场景
     public void initScene(string msg)
     {
         SceneList.Clear();
         JsonData data = JsonMapper.ToObject(msg);
         Debug.Log("initScene init"+ msg);
-        if (data["data"].IsArray)
+        if (data["data"]["list"].IsArray)
         {
-            max = data["data"].Count;
+            max = data["data"]["list"].Count;
                 Debug.Log("initScene IsArray");
-            for (int i = 0; i < data["data"].Count; i++)
+            for (int i = 0; i < data["data"]["list"].Count; i++)
             {
-                init(data["data"][i]["id"].ToString(), data["data"][i]["name"].ToString());
+                init(data["data"]["list"][i]["id"].ToString(), data["data"]["list"][i]["name"].ToString());
             }
         }else
         {
@@ -44,7 +44,7 @@ public class UserSceneManager : XRTool.Util.Singleton<UserSceneManager>
         string jsonData = JsonMapper.ToJson(sendNet);
         GameScene.Instance.StartCoroutine(HttpTool.Instance.SendHttp(HttpAction.client_snInfo, jsonData, (message) =>
         {
-            Debug.Log(" ³õʼ»¯³¡¾° client_snInfo==¡·" + message);
+            Debug.Log(" �始化场景 client_snInfo==》" + message);
             SendInit detail = new SendInit();
             detail.projectId = int.Parse(id);
             detail.sn = SendSN.GetSN();
@@ -52,11 +52,11 @@ public class UserSceneManager : XRTool.Util.Singleton<UserSceneManager>
             HttpTool
             .Instance.PostTest(HttpAction.sn_init, str, (mes) =>
             {
-                Debug.Log(" ³õʼ»¯³¡¾° sn_init==¡·" + mes+"===>id"+ detail.projectId.ToString());
+                Debug.Log(" �始化场景 sn_init==》" + mes+"===>id"+ detail.projectId.ToString());
                 JsonData data = JsonMapper.ToObject(mes);
                 if (data["data"].ToString() != null)
                 {
-                    CreateItem(data["data"], detail.projectId.ToString());
+                    CreateItem(data["data"]["info"], detail.projectId.ToString());
                 }
 
             });
@@ -96,9 +96,9 @@ public class UserSceneManager : XRTool.Util.Singleton<UserSceneManager>
                     si.usi = usi;
                     si.id = msg["listSpoit"][i]["id"].ToString();
                     si.name = msg["listSpoit"][i]["name"].ToString();
-                    if(msg["listSpoit"][i]["spoitTf"]!=null)
+                    if(msg["listSpoit"][i]["spoittf"]!=null)
                     {
-                        si.initSpoitTfInfo(msg["listSpoit"][i]["spoitTf"]);
+                        si.initSpoitTfInfo(msg["listSpoit"][i]["spoittf"]);
                     }
                     else
                     {
@@ -129,7 +129,7 @@ public class UserSceneManager : XRTool.Util.Singleton<UserSceneManager>
                                 {
                                     for (int z = 0; z < msg["listSpoit"][i]["material"][j]["materialList"].Count; z++)
                                     {
-                                        modellist.materialList[z].objectTransform = JsonConvert.DeserializeObject<ObjectTransform>(msg["listSpoit"][i]["material"][j]["materialList"][z]["ObjectTransform"].ToJson());
+                                        modellist.materialList[z].objectTransform = JsonConvert.DeserializeObject<ObjectTransform>(msg["listSpoit"][i]["material"][j]["materialList"][z]["objectTransform"].ToJson());
                                         modellist.materialList[z].initModelObj();
                                     }
                                 }
@@ -149,7 +149,7 @@ public class UserSceneManager : XRTool.Util.Singleton<UserSceneManager>
         usi.vufroiaTrigger.usi = usi;
 
         SceneList.Add(usi.id, usi);
-        Debug.Log("UI   Data   Ìí¼Ó³¡¾°===>"+ usi.id);
+        Debug.Log("UI   Data   添加场景===>"+ usi.id);
         now++;
         if(max<=now)
         {

+ 8 - 0
Assets/COS.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0f2e37302b597e64e8c109d47a189802
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/COSXMLDemo.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c4006367847ebcc4f8e07731a3b00938
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 12 - 0
Assets/COS/COSXMLDemo/COSXMLDemo.csproj

@@ -0,0 +1,12 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.*" />
+  </ItemGroup>
+
+</Project>

+ 7 - 0
Assets/COS/COSXMLDemo/COSXMLDemo.csproj.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5eabd0904b4666645aa5251e6adde97c
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 259 - 0
Assets/COS/COSXMLDemo/Program.cs

@@ -0,0 +1,259 @@
+using COSXML;
+using COSXML.Auth;
+using COSXML.Common;
+using COSXML.Utils;
+using COSXML.Model;
+using COSXML.Model.Object;
+using COSXML.Model.Bucket;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using COSXML.CosException;
+using System.Threading;
+using System.Threading.Tasks;
+using COSXML.Transfer;
+
+namespace COSXMLDemo
+{
+    public class Program
+    {
+        
+        internal static string bucket = @"bucket-4-dotnet-demo-1253653367";
+
+        public static async Task Main(string[] args)
+        {
+
+            // 腾讯云 SecretId
+            string secretId = Environment.GetEnvironmentVariable("SECRET_ID");
+            // 腾讯云 SecretKey
+            string secretKey = Environment.GetEnvironmentVariable("SECRET_KEY"); 
+            // 存储桶所在地域
+            string region = "ap-guangzhou"; 
+
+            // 普通初始化方式
+            CosXmlConfig config = new CosXmlConfig.Builder()
+                .SetRegion(region)
+                .SetDebugLog(true)
+                .Build();
+            
+            // TCE 初始化方式
+            // string domain = "your.domain";  // 替换成您的 Domain
+            // string endpoint = String.Format("cos.{0}.{1}", region, domain);
+            // CosXmlConfig config = new CosXmlConfig.Builder()
+            //     .setEndpointSuffix(endpoint)
+            //     .SetRegion(region)
+            //     .SetDebugLog(true)
+            //     .Build();
+
+            long keyDurationSecond = 600;
+            QCloudCredentialProvider qCloudCredentialProvider = new DefaultQCloudCredentialProvider(secretId, secretKey, keyDurationSecond);
+
+            // service 初始化完成
+            CosXmlServer cosXml = new CosXmlServer(config, qCloudCredentialProvider);
+
+            try 
+            {
+                // 创建存储痛
+                Console.WriteLine(" ======= Put Bucket ======");
+                PutBucket(cosXml);
+
+                // 上传对象
+                Console.WriteLine(" ======= Put Object ======");
+                string cosKey = await PutObject(cosXml);
+
+                // 下载对象
+                Console.WriteLine(" ======= Get Object ======");
+                await GetObject(cosXml, cosKey);
+
+                // 删除对象
+                Console.WriteLine(" ======= Delete Object ======");
+                DeleteObject(cosXml, cosKey);
+
+                // Console.WriteLine(" ======= Put Directory ======");
+                // UploadDirectory(cosXml);
+            } 
+            catch (COSXML.CosException.CosClientException clientEx)
+            {
+                Console.WriteLine("CosClientException: " + clientEx.Message);
+            }
+            catch (COSXML.CosException.CosServerException serverEx)
+            {
+                Console.WriteLine("CosServerException: " + serverEx.GetInfo());
+            }
+            
+            finally 
+            {
+                // 删除存储桶
+                Console.WriteLine(" ======= Delete Bucket ======");
+                DeleteBucket(cosXml);
+            }
+
+            Console.WriteLine(" ======= Program End. ======");
+        }
+
+        internal static void PutBucket(CosXmlServer cosXml) 
+        {
+            try
+            {
+                PutBucketRequest request = new PutBucketRequest(bucket);
+
+                //执行请求
+                PutBucketResult result = cosXml.PutBucket(request);
+
+                Console.WriteLine(result.GetResultInfo());
+            }
+            catch (COSXML.CosException.CosServerException serverEx)
+            {
+                if (serverEx.statusCode != 409)
+                {
+                    throw serverEx;
+                } 
+                else 
+                {
+                    Console.WriteLine("Bucket Already exists.");
+                }
+            }
+        }
+
+        internal static void DeleteBucket(CosXmlServer cosXml) 
+        {
+            DeleteBucketRequest request = new DeleteBucketRequest(bucket);
+
+            DeleteBucketResult result = cosXml.DeleteBucket(request);
+
+            Console.WriteLine(result.GetResultInfo());
+        }
+
+        internal static async Task<String> PutObject(CosXmlServer cosXml) 
+        {
+            string cosKey = "cosKey";
+            //.cssg-snippet-body-start:[transfer-upload-file]
+            // 初始化 TransferConfig
+            TransferConfig transferConfig = new TransferConfig();
+            
+            // 初始化 TransferManager
+            TransferManager transferManager = new TransferManager(cosXml, transferConfig);
+            
+            //对象在存储桶中的位置标识符,即称对象键
+            String cosPath = cosKey; 
+            //本地文件绝对路径
+            String srcPath = @"本地绝对路径";
+            
+            // 上传对象
+            COSXMLUploadTask uploadTask = new COSXMLUploadTask(bucket, cosPath);
+            uploadTask.SetSrcPath(srcPath);
+            
+            uploadTask.progressCallback = delegate (long completed, long total)
+            {
+                Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
+            };
+
+            try 
+            {
+                COSXML.Transfer.COSXMLUploadTask.UploadTaskResult result = await 
+                    transferManager.UploadAsync(uploadTask);
+                Console.WriteLine(result.GetResultInfo());
+                string eTag = result.eTag;
+            } 
+            catch (Exception e) 
+            {
+                Console.WriteLine("CosException: " + e);
+            }
+
+            return cosKey;
+        }
+
+        internal static void UploadDirectory(CosXmlServer cosXml)
+        {
+            //.cssg-snippet-body-start:[transfer-upload-file]
+            // 初始化 TransferConfig
+            TransferConfig transferConfig = new TransferConfig();
+            
+            // 初始化 TransferManager
+            TransferManager transferManager = new TransferManager(cosXml, transferConfig);
+
+            //本地文件夹绝对路径
+            String dir = @"本地文件夹绝对路径";
+
+            var files = System.IO.Directory.GetFiles(dir);
+
+            var tasks = new List<Task>();
+            foreach (var file in files)
+            {
+                Console.WriteLine("Enqueue Upload: " + file);
+                //对象在存储桶中的位置标识符,即称对象键
+                String cosPath = new FileInfo(file).Name;
+                
+                // 上传对象
+                COSXMLUploadTask uploadTask = new COSXMLUploadTask(bucket, cosPath);
+                uploadTask.SetSrcPath(file);
+                
+                tasks.Add(transferManager.UploadAsync(uploadTask));
+            }
+
+            try
+            {
+                // Wait for all the tasks to finish.
+                Task.WaitAll(tasks.ToArray());
+
+                // We should never get to this point
+                Console.WriteLine("Upload Directory Complete");
+            }
+            catch (AggregateException e)
+            {
+                Console.WriteLine("\nThe following exceptions have been thrown by WaitAll(): (THIS WAS EXPECTED)");
+                for (int j = 0; j < e.InnerExceptions.Count; j++)
+                {
+                    Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());
+                }
+            }
+            
+        }
+
+        internal static async Task GetObject(CosXmlServer cosXml, string cosKey) 
+        {
+            TransferConfig transferConfig = new TransferConfig();
+        
+            // 初始化 TransferManager
+            TransferManager transferManager = new TransferManager(cosXml, transferConfig);
+            
+            //对象在存储桶中的位置标识符,即称对象键
+            String cosPath = cosKey; 
+            //本地文件夹
+            string localDir = System.IO.Path.GetTempPath();
+            //指定本地保存的文件名
+            string localFileName = "my-local-temp-file"; 
+            
+            // 下载对象
+            COSXMLDownloadTask downloadTask = new COSXMLDownloadTask(bucket, cosPath, 
+                localDir, localFileName);
+            
+            downloadTask.progressCallback = delegate (long completed, long total)
+            {
+                Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
+            };
+
+            try 
+            {
+                COSXML.Transfer.COSXMLDownloadTask.DownloadTaskResult result = await 
+                    transferManager.DownloadAsync(downloadTask);
+                Console.WriteLine(result.GetResultInfo());
+                string eTag = result.eTag;
+            } 
+            catch (Exception e) 
+            {
+                Console.WriteLine("CosException: " + e);
+            }
+        }
+
+        internal static void DeleteObject(CosXmlServer cosXml, string cosKey) 
+        {
+            DeleteObjectRequest request = new DeleteObjectRequest(bucket, cosKey);
+
+            DeleteObjectResult result = cosXml.DeleteObject(request);
+
+            Console.WriteLine(result.GetResultInfo());
+        }
+    }
+}

+ 11 - 0
Assets/COS/COSXMLDemo/Program.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a0e74bc3126d67248af6d308206e2a21
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c5376887c980643459aa198a8af9835a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 457472546fbfaad4f88612258932776e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Auth.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f0cb08ca610311347a0be8c8175605e5
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 516 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Auth/IQCloudSigner.cs

@@ -0,0 +1,516 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using COSXML.Network;
+using COSXML.Common;
+using COSXML.Log;
+using COSXML.Utils;
+
+namespace COSXML.Auth
+{
+
+    public delegate void OnGetSign(Request request, string sign);
+
+    /// <summary>
+    /// 计算请求签名
+    /// </summary>
+    public interface IQCloudSigner
+    {
+        void Sign(Request request, IQCloudSignSource qcloudSignSource, QCloudCredentials qcloudCredentials);
+    }
+
+    public interface IQCloudSignSource
+    {
+        string Source(Request request);
+    }
+
+    public sealed class CosXmlSignSourceProvider : IQCloudSignSource
+    {
+        private List<string> parameterKeysToSign;
+
+        private List<string> headerKeysToSign;
+
+        private string signTime;
+
+        private string headerList;
+
+        private string parameterList;
+
+        public OnGetSign onGetSign;
+
+        public CosXmlSignSourceProvider()
+        {
+            parameterKeysToSign = new List<string>();
+            headerKeysToSign = new List<string>();
+        }
+
+        public void AddParameterKey(string key)
+        {
+
+            if (key != null && !parameterKeysToSign.Contains(key))
+            {
+                parameterKeysToSign.Add(key);
+            }
+        }
+
+        public void AddParameterKeys(List<string> keys)
+        {
+
+            if (keys != null)
+            {
+
+                foreach (string key in keys)
+                {
+                    if (!parameterKeysToSign.Contains(key))
+                    {
+                        this.parameterKeysToSign.Add(key.ToLower());
+                    }
+                }
+            }
+        }
+
+        public void AddHeaderKey(string key)
+        {
+
+            if (key != null && !headerKeysToSign.Contains(key))
+            {
+                headerKeysToSign.Add(key);
+            }
+        }
+
+        public void RemoveHeaderKey(string key)
+        {
+
+            if (key != null)
+            {
+                headerKeysToSign.Remove(key);
+            }
+        }
+
+        public void AddHeaderKeys(List<string> keys)
+        {
+
+            if (keys != null)
+            {
+
+                foreach (string key in keys)
+                {
+                    if (!headerKeysToSign.Contains(key))
+                    {
+                        this.headerKeysToSign.Add(key.ToLower());
+                    }
+                }
+            }
+        }
+
+        public void SetSignTime(string signTime)
+        {
+
+            if (signTime != null)
+            {
+                this.signTime = signTime;
+            }
+        }
+
+        public void SetSignTime(long signStartTime, long duration)
+        {
+            this.signTime = String.Format("{0};{1}", signStartTime, signStartTime + duration);
+        }
+
+        public string GetSignTime()
+        {
+
+            return signTime;
+        }
+
+        public string GetHeaderList()
+        {
+
+            return headerList;
+        }
+
+        public string GetParameterList()
+        {
+
+            return parameterList;
+        }
+
+        public string Source(Request request)
+        {
+
+            Dictionary<string, string> sourceHeaders = request.Headers;
+
+            Dictionary<string, string> lowerKeySourceHeaders = new Dictionary<string, string>(sourceHeaders.Count);
+
+            foreach (KeyValuePair<string, string> pair in sourceHeaders)
+            {
+                lowerKeySourceHeaders.Add(pair.Key.ToLower(), pair.Value);
+            }
+
+            lowerKeySourceHeaders.Add("host", request.Host);
+
+            if (headerKeysToSign.Contains("content-length"))
+            {
+
+                try
+                {
+                    long contentLength = 0;
+
+                    if (request.Body != null)
+                    {
+                        contentLength = request.Body.ContentLength;
+                    }
+
+                    if (contentLength > 0)
+                    {
+                        lowerKeySourceHeaders.Add("content-length", contentLength.ToString());
+                    }
+                }
+                catch (Exception)
+                {
+
+                }
+            }
+
+            Dictionary<string, string> sourceParameters = request.Url.GetQueryParameters();
+
+            Dictionary<string, string> lowerKeySourceParameters = new Dictionary<string, string>(sourceParameters.Count);
+
+            foreach (KeyValuePair<string, string> pair in sourceParameters)
+            {
+                lowerKeySourceParameters.Add(pair.Key.ToLower(), pair.Value);
+            }
+
+            string path = URLEncodeUtils.Decode(request.Url.Path);
+
+            return GenerateSource(request.Method, path, lowerKeySourceParameters, lowerKeySourceHeaders);
+        }
+
+        /// <summary>
+        /// $HttpString = [HttpMethod]\n[HttpURI]\n[HttpParameters]\n[HttpHeaders]\n
+        /// </summary>
+        /// <param name="method"></param>
+        /// <param name="path"></param>
+        /// <param name="queryParameters"></param>
+        /// <param name="headers"></param>
+        /// <returns></returns>
+        public string GenerateSource(string method, string path, Dictionary<string, string> queryParameters, Dictionary<string, string> headers)
+        {
+            StringBuilder formatString = new StringBuilder();
+
+            // method
+            // method
+            formatString.Append(method.ToLower()).Append('\n');
+            // path
+            // path
+            formatString.Append(path).Append('\n');
+
+            //check header and parameter in request
+            string headerResult = CheckHeaders(headers);
+            string parameterResult = CheckParameters(queryParameters);
+
+
+            if (parameterResult != null)
+            {
+                // parameters
+                // parameters
+                formatString.Append(parameterResult);
+            }
+
+            formatString.Append('\n');
+
+            if (headerResult != null)
+            {
+                // headers
+                // headers
+                formatString.Append(headerResult);
+            }
+
+            formatString.Append('\n');
+            StringBuilder stringToSign = new StringBuilder();
+
+            stringToSign.Append(CosAuthConstants.SHA1).Append('\n');
+            stringToSign.Append(signTime).Append('\n');
+            stringToSign.Append(DigestUtils.GetSha1ToHexString(formatString.ToString(), Encoding.UTF8)).Append('\n');
+
+            return stringToSign.ToString();
+        }
+
+        public string CheckHeaders(Dictionary<string, string> sourceHeaders)
+        {
+
+            if (sourceHeaders == null)
+            {
+
+                return null;
+            }
+
+            //将指定的headers 小写且排序
+            List<String> keys = new List<String>(headerKeysToSign);
+
+            LowerAndSort(keys);
+
+            //计算结果
+            string[] result = Calculate(keys, sourceHeaders, true);
+
+            if (result != null)
+            {
+                headerList = result[1];
+
+                return result[0];
+            }
+
+            return null;
+        }
+
+        public string CheckParameters(Dictionary<string, string> sourceQueryParameters)
+        {
+
+            if (sourceQueryParameters == null)
+            {
+
+                return null;
+            }
+
+            //将指定的parameter key 小写 且 排序
+            List<String> keys = new List<String>(parameterKeysToSign);
+
+            LowerAndSort(keys);
+
+            //计算结果
+            string[] result = Calculate(keys, sourceQueryParameters, false);
+
+            if (result != null)
+            {
+                parameterList = result[1];
+
+                return result[0];
+            }
+
+            return null;
+        }
+
+        public string[] Calculate(List<string> keys, Dictionary<string, string> dict, bool isNeedEncode)
+        {
+            StringBuilder resultBuilder = new StringBuilder();
+            StringBuilder keyResultBuilder = new StringBuilder();
+
+            foreach (string key in keys)
+            {
+
+                if (!dict.ContainsKey(key))
+                {
+                    // 排除一些不可能存在的key
+                    // 排除一些不可能存在的key
+                    continue;
+                }
+
+                string value = dict[key];
+
+                if (value != null)
+                {
+
+                    if (isNeedEncode)
+                    {
+                        resultBuilder.Append(key).Append('=').Append(URLEncodeUtils.Encode(value)).Append('&');
+                    }
+                    else
+                    {
+                        resultBuilder.Append(key).Append('=').Append(value).Append('&');
+                    }
+
+                    keyResultBuilder.Append(key).Append(';');
+                }
+                else
+                {
+                    resultBuilder.Append(key).Append('=').Append('&');
+                    keyResultBuilder.Append(key).Append(';');
+                }
+            }
+
+            string result = resultBuilder.ToString();
+            string keyResult = keyResultBuilder.ToString();
+
+            if (result.EndsWith("&", StringComparison.OrdinalIgnoreCase))
+            {
+                result = result.Substring(0, result.Length - 1);
+                keyResult = keyResult.Substring(0, keyResult.Length - 1);
+
+                return new string[]
+                {
+                    result, keyResult
+                };
+            }
+
+            return null;
+        }
+
+        /// <summary>
+        /// 小写 排序
+        /// </summary>
+        /// <param name="list"></param>
+        public void LowerAndSort(List<string> list)
+        {
+
+            if (list != null)
+            {
+
+                for (int i = 0, size = list.Count; i < size; i++)
+                {
+                    list[i] = list[i].ToLower();
+                }
+
+                list.Sort(delegate (string strA, string strB)
+                {
+
+                    return StringUtils.Compare(strA, strB, false);
+                });
+            }
+        }
+
+    }
+
+    public sealed class CosXmlSigner : IQCloudSigner
+    {
+        public CosXmlSigner()
+        {
+
+        }
+
+        public void Sign(Request request, IQCloudSignSource qcloudSignSource, QCloudCredentials qcloudCredentials)
+        {
+
+            if (request == null)
+            {
+                throw new ArgumentNullException("Request == null");
+            }
+
+            if (qcloudCredentials == null)
+            {
+                throw new ArgumentNullException("QCloudCredentials == null");
+            }
+
+            if (qcloudSignSource == null || !(qcloudSignSource is CosXmlSignSourceProvider))
+            {
+                throw new ArgumentNullException("CosXmlSourceProvider == null");
+            }
+
+            CosXmlSignSourceProvider cosXmlSourceProvider = (CosXmlSignSourceProvider)qcloudSignSource;
+
+
+            string signTime = cosXmlSourceProvider.GetSignTime();
+
+            if (signTime == null)
+            {
+                signTime = qcloudCredentials.KeyTime;
+                cosXmlSourceProvider.SetSignTime(signTime);
+            }
+
+            string signature = DigestUtils.GetHamcSha1ToHexString(cosXmlSourceProvider.Source(request), Encoding.UTF8, qcloudCredentials.SignKey, Encoding.UTF8);
+            StringBuilder signBuilder = new StringBuilder();
+
+
+            signBuilder.Append(CosAuthConstants.Q_SIGN_ALGORITHM).Append('=').Append(CosAuthConstants.SHA1).Append('&')
+                .Append(CosAuthConstants.Q_AK).Append('=').Append(qcloudCredentials.SecretId).Append('&')
+                .Append(CosAuthConstants.Q_SIGN_TIME).Append('=').Append(signTime).Append('&')
+                .Append(CosAuthConstants.Q_KEY_TIME).Append('=').Append(qcloudCredentials.KeyTime).Append('&')
+                .Append(CosAuthConstants.Q_HEADER_LIST).Append('=').Append(cosXmlSourceProvider.GetHeaderList()).Append('&')
+                .Append(CosAuthConstants.Q_URL_PARAM_LIST).Append('=').Append(cosXmlSourceProvider.GetParameterList()).Append('&')
+                .Append(CosAuthConstants.Q_SIGNATURE).Append('=').Append(signature);
+            string sign = signBuilder.ToString();
+
+            request.AddHeader(CosRequestHeaderKey.AUTHORIZAIION, sign);
+
+            if (qcloudCredentials is SessionQCloudCredentials)
+            {
+                request.AddHeader(CosRequestHeaderKey.COS_SESSION_TOKEN, ((SessionQCloudCredentials)qcloudCredentials).Token);
+            }
+
+            if (cosXmlSourceProvider.onGetSign != null)
+            {
+                cosXmlSourceProvider.onGetSign(request, sign);
+            }
+        }
+
+        public static string GenerateSign(string method, string path, Dictionary<string, string> queryParameters, Dictionary<string, string> headers, 
+                                          string signTime, string keyTime, QCloudCredentials qcloudCredentials)
+        {
+
+            if (qcloudCredentials == null)
+            {
+                throw new ArgumentNullException("QCloudCredentials == null");
+            }
+
+            CosXmlSignSourceProvider cosXmlSourceProvider = new CosXmlSignSourceProvider();
+
+            if (signTime == null)
+            {
+                signTime = qcloudCredentials.KeyTime;
+            }
+
+            if (keyTime == null)
+            {
+                keyTime = qcloudCredentials.KeyTime;
+            }
+
+            cosXmlSourceProvider.SetSignTime(signTime);
+
+            if (headers != null)
+            {
+
+                foreach (string key in headers.Keys)
+                {
+                    cosXmlSourceProvider.AddHeaderKey(key);
+                }
+            }
+
+            if (queryParameters != null)
+            {
+
+                foreach (string key in queryParameters.Keys)
+                {
+                    cosXmlSourceProvider.AddParameterKey(key);
+                }
+            }
+
+            string signature = DigestUtils.GetHamcSha1ToHexString(cosXmlSourceProvider.GenerateSource(method, path, queryParameters, headers), Encoding.UTF8,
+                qcloudCredentials.SignKey, Encoding.UTF8);
+
+            StringBuilder signBuilder = new StringBuilder();
+
+            signBuilder.Append(CosAuthConstants.Q_SIGN_ALGORITHM).Append('=').Append(CosAuthConstants.SHA1).Append('&')
+                .Append(CosAuthConstants.Q_AK).Append('=').Append(qcloudCredentials.SecretId).Append('&')
+                .Append(CosAuthConstants.Q_SIGN_TIME).Append('=').Append(cosXmlSourceProvider.GetSignTime()).Append('&')
+                .Append(CosAuthConstants.Q_KEY_TIME).Append('=').Append(keyTime).Append('&')
+                .Append(CosAuthConstants.Q_HEADER_LIST).Append('=').Append(cosXmlSourceProvider.GetHeaderList()).Append('&')
+                .Append(CosAuthConstants.Q_URL_PARAM_LIST).Append('=').Append(cosXmlSourceProvider.GetParameterList()).Append('&')
+                .Append(CosAuthConstants.Q_SIGNATURE).Append('=').Append(signature);
+
+            if (qcloudCredentials is SessionQCloudCredentials)
+            {
+                signBuilder.Append("&").Append(CosRequestHeaderKey.COS_SESSION_TOKEN).Append("=").Append(((SessionQCloudCredentials)qcloudCredentials).Token);
+            }
+
+            return signBuilder.ToString();
+        }
+    }
+
+    public sealed class CosAuthConstants
+    {
+        public const string Q_SIGN_ALGORITHM = "q-sign-algorithm";
+
+        public const string Q_AK = "q-ak";
+
+        public const string Q_SIGN_TIME = "q-sign-time";
+
+        public const string Q_KEY_TIME = "q-key-time";
+
+        public const string Q_HEADER_LIST = "q-header-list";
+
+        public const string Q_URL_PARAM_LIST = "q-url-param-list";
+
+        public const string Q_SIGNATURE = "q-signature";
+
+        public const string SHA1 = "sha1";
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Auth/IQCloudSigner.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4dffb448ce900264d86a9e4191e6c9ce
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 196 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentialProvider.cs

@@ -0,0 +1,196 @@
+using System;
+
+using System.Text;
+using COSXML.Utils;
+using COSXML.CosException;
+using COSXML.Common;
+using COSXML.Log;
+using COSXML.Network;
+using System.IO;
+
+namespace COSXML.Auth
+{
+
+    public abstract class QCloudCredentialProvider
+    {
+        public virtual QCloudCredentials GetQCloudCredentials()
+        {
+            return null;
+        }
+
+        public abstract void Refresh();
+
+        public virtual QCloudCredentials GetQCloudCredentialsWithRequest(Request request)
+        {
+            return null;
+        }
+
+        public QCloudCredentials GetQCloudCredentialsCompat(Request request)
+        {
+            QCloudCredentials credentials = GetQCloudCredentialsWithRequest(request);
+
+            if (credentials == null)
+            {
+                credentials = GetQCloudCredentials(); 
+            }
+
+            return credentials;
+        }
+    }
+
+    /// <summary>
+    /// 直接通过永久密钥初始化
+    /// </summary>
+    public class DefaultQCloudCredentialProvider : QCloudCredentialProvider
+    {
+        private string secretId;
+
+        private string secretKey;
+
+        private long keyTimDuration;
+
+        public DefaultQCloudCredentialProvider(string secretId, string secretKey, long keyDurationSecond)
+        {
+            if (secretId == null || secretId.Length == 0)
+                throw new CosClientException((int)CosClientError.InvalidArgument, "secretId is null or length is zero");
+            if (secretKey == null || secretKey.Length == 0)
+                throw new CosClientException((int)CosClientError.InvalidArgument, "secretKey is null or length is zero");
+            this.secretId = secretId.Trim();
+            this.secretKey = secretKey.Trim();
+            this.keyTimDuration = keyDurationSecond;
+        }
+
+        public override QCloudCredentials GetQCloudCredentials()
+        {
+            long keyStartTime = TimeUtils_QCloud.GetCurrentTime(TimeUnit.Seconds);
+
+            long keyEndTime = keyStartTime + keyTimDuration;
+
+            string keyTime = String.Format("{0};{1}", keyStartTime, keyEndTime);
+
+            if (secretId == null)
+            {
+                throw new CosClientException((int)CosClientError.InvalidCredentials, "secretId == null");
+            }
+
+            if (secretKey == null)
+            {
+                throw new CosClientException((int)CosClientError.InvalidCredentials, "secretKey == null");
+            }
+
+            string signKey = DigestUtils.GetHamcSha1ToHexString(keyTime, Encoding.UTF8, secretKey, Encoding.UTF8);
+
+            return new QCloudCredentials(secretId, signKey, keyTime);
+        }
+
+        public override void Refresh()
+        {
+            //TODO update value
+            QLog.Debug("DefaultQCloudCredentialProvider", "need to update QCloudCredentials");
+            //invoke SetSetQCloudCredential(string secretId, string secretKey, string keyTime)
+        }
+    }
+
+    /// <summary>
+    /// 通过腾讯云临时密钥初始化
+    /// </summary>
+    public class DefaultSessionQCloudCredentialProvider : QCloudCredentialProvider
+    {
+        private string tmpSecretId;
+
+        private string tmpSecretKey;
+
+        private string keyTime;
+
+        private string token;
+
+        public DefaultSessionQCloudCredentialProvider(string tmpSecretId, string tmpSecretKey, long tmpExpiredTime, string sessionToken)
+            : this(tmpSecretId, tmpSecretKey, TimeUtils_QCloud.GetCurrentTime(TimeUnit.Seconds), tmpExpiredTime, sessionToken)
+        {
+        }
+
+        public DefaultSessionQCloudCredentialProvider(string tmpSecretId, string tmpSecretKey, long keyStartTimeSecond, long tmpExpiredTime, string sessionToken)
+        {
+            this.tmpSecretId = tmpSecretId;
+            this.tmpSecretKey = tmpSecretKey;
+            this.keyTime = String.Format("{0};{1}", keyStartTimeSecond, tmpExpiredTime);
+            this.token = sessionToken;
+        }
+
+        public override QCloudCredentials GetQCloudCredentials()
+        {
+
+            if (IsNeedUpdateNow())
+            {
+                Refresh();
+            }
+
+            if (tmpSecretId == null)
+            {
+                throw new CosClientException((int)CosClientError.InvalidCredentials, "secretId == null");
+            }
+
+            if (tmpSecretKey == null)
+            {
+                throw new CosClientException((int)CosClientError.InvalidCredentials, "secretKey == null");
+            }
+
+            if (keyTime == null)
+            {
+                throw new CosClientException((int)CosClientError.InvalidCredentials, "keyTime == null");
+            }
+
+            string signKey = DigestUtils.GetHamcSha1ToHexString(keyTime, Encoding.UTF8, tmpSecretKey, Encoding.UTF8);
+
+            return new SessionQCloudCredentials(tmpSecretId, signKey, token, keyTime);
+        }
+
+        public override void Refresh()
+        {
+            //TODO update value
+            QLog.Debug("DefaultSessionQCloudCredentialProvider", "need to update QCloudCredentials");
+            //invoke SetQCloudCredential(string tmpSecretId, string tmpSecretKey, string tmpkeyTime, string sessionToken)
+        }
+
+        public bool IsNeedUpdateNow()
+        {
+
+            if (String.IsNullOrEmpty(keyTime) || String.IsNullOrEmpty(tmpSecretId) || String.IsNullOrEmpty(tmpSecretKey) || String.IsNullOrEmpty(token))
+            {
+
+                return true;
+            }
+
+            int index = keyTime.IndexOf(';');
+            long endTime = -1L;
+
+            long.TryParse(keyTime.Substring(index + 1), out endTime);
+            long nowTime = TimeUtils_QCloud.GetCurrentTime(TimeUnit.Seconds);
+
+            if (endTime <= nowTime)
+            {
+
+                return true;
+            }
+
+            return false;
+        }
+
+        /// <summary>
+        /// 直接设置临时密钥信息
+        /// </summary>
+        /// <param name="tmpSecretId">临时安全证书 Id</param>
+        /// <param name="tmpSecretKey">临时安全证书 Key</param>
+        /// <param name="tmpkeyTime">证书有效的期间</param>
+        /// <param name="sessionToken">token 值</param>
+        public void SetQCloudCredential(string tmpSecretId, string tmpSecretKey, string tmpkeyTime, string sessionToken)
+        {
+            this.tmpSecretId = tmpSecretId;
+            this.tmpSecretKey = tmpSecretKey;
+            this.token = sessionToken;
+            this.keyTime = tmpkeyTime;
+        }
+    }
+
+
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentialProvider.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eac1001fb74394d43b22755cb516e741
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 39 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentials.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace COSXML.Auth
+{
+    public class QCloudCredentials
+    {
+        public QCloudCredentials(string secretId, string signKey, string keyTime)
+        {
+            this.SecretId = secretId;
+            this.SignKey = signKey;
+            this.KeyTime = keyTime;
+        }
+
+        public string SecretId
+        { get; private set; }
+
+        public string SignKey
+        { get; private set; }
+
+        public string KeyTime
+        { get; private set; }
+
+    }
+
+    public class SessionQCloudCredentials : QCloudCredentials
+    {
+        public SessionQCloudCredentials(string secretId, string signKey, string token, string keyTime) :
+            base(secretId, signKey, keyTime)
+        {
+            this.Token = token;
+
+        }
+
+        public string Token
+        { get; private set; }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Auth/QCloudCredentials.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4825b652de8f46049a89538da4da1c10
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 50 - 0
Assets/COS/QCloudCSharpSDK/COSXML/COSXML-Netcore.csproj

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project Sdk="Microsoft.NET.Sdk" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectGuid>{FC694C68-F0E3-411F-8E6C-2E9F94826016}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>COSXML</RootNamespace>
+    <AssemblyName>COSXML</AssemblyName>
+    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+
+    <PackageId>Tencent.QCloud.Cos.Sdk</PackageId>
+    <Version>5.4.34.0</Version>
+    <Authors>Tencent</Authors>
+    <Company>Tencent</Company>
+    <description>Tencent Cloud COS(Cloud Object Service) .Net SDK</description>
+
+  </PropertyGroup>
+  
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\COSXML.xml</DocumentationFile>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <GenerateDocumentationFile>true</GenerateDocumentationFile>
+    <DocumentationFile>bin\COSXML.XML</DocumentationFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+  </ItemGroup>
+</Project>

+ 7 - 0
Assets/COS/QCloudCSharpSDK/COSXML/COSXML-Netcore.csproj.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f9f8551eaaceba641b23df667204c39f
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 692 - 0
Assets/COS/QCloudCSharpSDK/COSXML/COSXML.csproj

@@ -0,0 +1,692 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{2EAC00B4-2C14-491A-AEEE-8953D8A83EBF}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>COSXML</RootNamespace>
+    <AssemblyName>COSXML-Compatible</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetFrameworkVersion)' == 'v4.0' OR '$(TargetFrameworkVersion)' == 'v2.0' OR '$(TargetFrameworkVersion)' == 'v3.5'">
+    <DefineConstants>COMPATIBLE</DefineConstants>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Auth\QCloudCredentials.cs" />
+    <Compile Include="Auth\QCloudCredentialProvider.cs" />
+    <Compile Include="Auth\IQCloudSigner.cs" />
+    <Compile Include="Common\CosACL.cs" />
+    <Compile Include="Common\CosClientError.cs" />
+    <Compile Include="Common\CosGrantPermission.cs" />
+    <Compile Include="Common\CosMetaDataDirective.cs" />
+    <Compile Include="Common\CosRequestHeaderKey.cs" />
+    <Compile Include="Common\CosRequestMethod.cs" />
+    <Compile Include="Common\CosStorageClass.cs" />
+    <Compile Include="Common\CosVersion.cs" />
+    <Compile Include="CosException\CosClientException.cs" />
+    <Compile Include="CosException\CosServerException.cs" />
+    <Compile Include="CosXml.cs" />
+    <Compile Include="CosXmlConfig.cs" />
+    <Compile Include="CosXmlServer.cs" />
+    <Compile Include="Listener\CosCallback.cs" />
+    <Compile Include="Log\FileLogImpl.cs" />
+    <Compile Include="Log\ILog.cs" />
+    <Compile Include="Log\LogImpl.cs" />
+    <Compile Include="Log\QLog.cs" />
+    <Compile Include="Model\Bucket\BucketRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketCORSRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketCORSResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketInventoryRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketInventoryResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketLifecycleRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketLifecycleResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketPolicyRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketPolicyResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketReplicationRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketReplicationResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketTaggingRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketTaggingResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketWebsiteRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DeleteBucketWebsiteResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\DoesBucketExistRequest.cs" />
+    <Compile Include="Model\Bucket\GetBucketACLRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketACLResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketCORSRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketCORSResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketDomainRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketDomainResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketIntelligentTieringRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketIntelligentTieringResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketInventoryRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketInventoryResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketLifecycleRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketLifecycleResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketLoggingRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketLoggingResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketPolicyRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketPolicyResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketRefererRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketRefererResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketReplicationRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketReplicationResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketTaggingRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketTaggingResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketVersioningRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketVersioningResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketWebsiteRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\GetBucketWebsiteResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\HeadBucketRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\HeadBucketResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\ListBucketInventoryRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\ListBucketInventoryResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\ListBucketVersionsRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\ListBucketVersionsResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\ListMultiUploadsRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\ListMultiUploadsResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketACLRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketACLResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketCORSRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketCORSResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketDomainRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketDomainResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketIntelligentTieringRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketInventoryRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketInventoryResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketLifecycleRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketLifecycleResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketLoggingRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketLoggingResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketPolicyRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketPolicyResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketRefererRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketRefererResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketReplicationRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketReplicationResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketTaggingRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketTaggingResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketVersioningRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketVersioningResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketWebsiteRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Bucket\PutBucketWebsiteResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\CIRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\DescribeMediaBucketsRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\DescribeMediaBucketsResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetAudioCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetAudioCensorJobResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetDocumentCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetDocumentCensorJobResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetMediaInfoRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetMediaInfoResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetSnapshotRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetSnapshotResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetTextCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetTextCensorJobResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetVideoCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\GetVideoCensorJobResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\ImageProcessRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\ImageProcessResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\QRCodeRecognitionRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\QRCodeRecognitionResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\SensitiveContentRecognitionRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\SensitiveContentRecognitionResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\SubmitAudioCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\SubmitCensorJobResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\SubmitDocumentCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\SubmitTextCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CI\SubmitVideoCensorJobRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CosRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\CosResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\AbortMultipartUploadRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\AbortMultipartUploadResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\AppendObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\AppendObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\CompleteMultipartUploadRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\CompleteMultipartUploadResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\CopyObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\CopyObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\DeleteMultiObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\DeleteMultiObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\DeleteObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\DeleteObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\DeleteObjectTaggingRequest.cs" />
+    <Compile Include="Model\Object\DeleteObjectTaggingResult.cs" />
+    <Compile Include="Model\Object\DoesObjectExistRequest.cs" />
+    <Compile Include="Model\Object\GetObjectACLRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\GetObjectACLResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\GetObjectBytesRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\GetObjectBytesResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\GetObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\GetObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\GetObjectTaggingRequest.cs" />
+    <Compile Include="Model\Object\GetObjectTaggingResult.cs" />
+    <Compile Include="Model\Object\HeadObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\HeadObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\InitMultipartUploadRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\InitMultipartUploadResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\ListPartsRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\ListPartsResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\ObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\OptionObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\OptionObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\PostObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\PostObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\PutObjectACLRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\PutObjectACLResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\PutObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\PutObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\PutObjectTaggingRequest.cs" />
+    <Compile Include="Model\Object\PutObjectTaggingResult.cs" />
+    <Compile Include="Model\Object\RestoreObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\RestoreObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\SelectObjectRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\SelectObjectResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\UploadPartCopyRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\UploadPartCopyResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\UploadPartRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Object\UploadPartResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Service\GetServiceRequest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Service\GetServiceResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\AccessControlPolicy.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\AudioCensorJobInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\AudioCensorResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\BucketLoggingStatus.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CensorJobDetail.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CompleteMultipartUpload.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CompleteResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CopyObject.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CopyPartResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CopySourceStruct.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CORSConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\CosServerError.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\Delete.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\DeleteResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\DocumentCensorJobInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\DocumentCensorResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\DomainConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\GrantAccount.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\InitiateMultipartUpload.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\IntelligentTieringConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\InventoryConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\LifecycleConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ListAllMyBuckets.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ListBucket.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ListBucketVersions.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ListInventoryConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ListMultipartUploads.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ListParts.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\MediaBuckets.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\MediaInfoResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ObjectSelectionFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\PicOperationUploadResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\PreSignatureStruct.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\QRRecognitionResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\RefererConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\ReplicationConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\RestoreConfigure.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\SelectObject.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\SensitiveRecognitionResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\Tagging.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\TextCensorJobInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\TextCensorResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\VersioningConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\VideoCensorJobInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\VideoCensorResult.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Model\Tag\WebsiteConfiguration.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Network\CommandTask.cs" />
+    <Compile Include="Network\HttpClient.cs" />
+    <Compile Include="Network\HttpClientConfig.cs" />
+    <Compile Include="Network\HttpUrl.cs" />
+    <Compile Include="Network\Request.cs" />
+    <Compile Include="Network\RequestBody.cs" />
+    <Compile Include="Network\Response.cs" />
+    <Compile Include="Network\ResponseBody.cs" />
+    <Compile Include="Network\RetryStrategy.cs" />
+    <Compile Include="Transfer\XmlBuilder.cs" />
+    <Compile Include="Transfer\XmlParse.cs" />
+    <Compile Include="Utils\CosValueAttribute.cs" />
+    <Compile Include="Utils\Crc64.cs" />
+    <Compile Include="Utils\DigestUtils.cs" />
+    <Compile Include="Utils\EnumUtils.cs" />
+    <Compile Include="Utils\HttpDateTimeUtils.cs" />
+    <Compile Include="Utils\StringUtils.cs" />
+    <Compile Include="Utils\TimeUtils.cs" />
+    <Compile Include="Utils\URLEncodeUtils.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 7 - 0
Assets/COS/QCloudCSharpSDK/COSXML/COSXML.csproj.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5ea387e16fa619e49b2a6fd71057352c
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 20 - 0
Assets/COS/QCloudCSharpSDK/COSXML/COSXML.sln

@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "COSXML", "COSXML.csproj", "{2EAC00B4-2C14-491A-AEEE-8953D8A83EBF}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{2EAC00B4-2C14-491A-AEEE-8953D8A83EBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2EAC00B4-2C14-491A-AEEE-8953D8A83EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2EAC00B4-2C14-491A-AEEE-8953D8A83EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2EAC00B4-2C14-491A-AEEE-8953D8A83EBF}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 7 - 0
Assets/COS/QCloudCSharpSDK/COSXML/COSXML.sln.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 44cf24854e57b164c9431a18ca9e50f5
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f75603da4ef31d64d925d5521277c7fa
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 29 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosACL.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Utils;
+
+namespace COSXML.Common
+{
+    public enum CosACL
+    {
+        /// <summary>
+        /// 私有读写
+        /// </summary>
+        [CosValue("private")]
+        Private = 0,
+
+        /// <summary>
+        /// 私有写公有读
+        /// </summary>
+        [CosValue("public-read")]
+        PublicRead,
+
+        /// <summary>
+        /// 公有读写
+        /// </summary>
+        [CosValue("public-read-write")]
+        PublicReadWrite,
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosACL.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: be6673aa091cc3c4e93561f0b1c94a5a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 45 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosClientError.cs

@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+using COSXML.Utils;
+
+namespace COSXML.Common
+{
+    public enum CosClientError
+    {
+        [CosValue("InvalidArgument")]
+        InvalidArgument = 10000,
+
+        [CosValue("InvalidCredentials")]
+        InvalidCredentials = 10001,
+
+        [CosValue("BadRequest")]
+        BadRequest = 10002,
+
+        [CosValue("SinkSourceNotFound")]
+        SinkSourceNotFound = 10003,
+
+        [CosValue("CRC64ecmaCheckFailed")]
+        CRC64ecmaCheckFailed = 10004,
+
+        [CosValue("InternalError")]
+        InternalError = 20000,
+
+        [CosValue("ServerError")]
+        ServerError = 20001,
+
+        [CosValue("IOError")]
+        IOError = 20002,
+
+        [CosValue("PoorNetwork")]
+        PoorNetwork = 20003,
+
+        [CosValue("UserCancelled")]
+        UserCancelled = 30000,
+
+        [CosValue("AlreadyFinished")]
+        AlredyFinished = 30001,
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosClientError.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8d2addab330c813459f0a7c4cb87bb50
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 30 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosGrantPermission.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+using COSXML.Utils;
+
+namespace COSXML.Common
+{
+    public enum CosGrantPermission
+    {
+        /// <summary>
+        /// 只读权限
+        /// </summary>
+        [CosValue("READ")]
+        Read = 0,
+
+        /// <summary>
+        /// 只写权限
+        /// </summary>
+        [CosValue("WRITE")]
+        Write,
+
+        /// <summary>
+        /// 读写权限
+        /// </summary>
+        [CosValue("FULL_CONTROL")]
+        FullControl
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosGrantPermission.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce4622918235d794b93fa2ad24e15e64
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 18 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosMetaDataDirective.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+using COSXML.Utils;
+
+namespace COSXML.Common
+{
+    public enum CosMetaDataDirective
+    {
+        [CosValue("Copy")]
+        Copy = 0,
+
+        [CosValue("Replaced")]
+        Replaced
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosMetaDataDirective.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 20ba0979074c6ad4691fe18a8dd16ab0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 92 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestHeaderKey.cs

@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+
+namespace COSXML.Common
+{
+    public sealed class CosRequestHeaderKey
+    {
+        public const string COS_SESSION_TOKEN = "x-cos-security-token";
+
+        public const string AUTHORIZAIION = "Authorization";
+
+        public const string CONTENT_TYPE = "Content-Type";
+
+        public const string X_COS_ACL = "x-cos-acl";
+
+        public const string X_COS_GRANT_READ = "x-cos-grant-read";
+
+        public const string X_COS_GRANT_WRITE = "x-cos-grant-write";
+
+        public const string X_COS_GRANT_FULL_CONTROL = "x-cos-grant-full-control";
+
+        public const string CACHE_CONTROL = "Cache-Control";
+
+        public const string CONTENT_DISPOSITION = "Content-Disposition";
+
+        public const string CONTENT_ENCODING = "Content-Encoding";
+
+        public const string EXPIRES = "Expires";
+
+        public const string X_COS_COPY_SOURCE = "x-cos-copy-source";
+
+        public const string X_COS_METADATA_DIRECTIVE = "x-cos-metadata-directive";
+
+        public const string X_COS_COPY_SOURCE_IF_MODIFIED_SINCE = "x-cos-copy-source-If-Modified-Since";
+
+        public const string X_COS_COPY_SOURCE_IF_UNMODIFIED_SINCE = "x-cos-copy-source-If-Unmodified-Since";
+
+        public const string X_COS_COPY_SOURCE_IF_MATCH = "x-cos-copy-source-If-Match";
+
+        public const string X_COS_COPY_SOURCE_IF_NONE_MATCH = "x-cos-copy-source-If-None-Match";
+
+        public const string X_COS_STORAGE_CLASS = "x-cos-storage-class";
+
+        public const string X_COS_COPY_SOURCE_RANGE = "x-cos-copy-source-range";
+        // 限速
+        public const string X_COS_TRAFFIC_LIMIT = "x-cos-traffic-limit";
+
+        public const string ORIGIN = "Origin";
+
+        public const string ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";
+
+        public const string ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers";
+
+        public const string IF_MODIFIED_SINCE = "If-Modified-Since";
+
+        public const string IF_UNMODIFIED_SINCE = "If-Unmodified-Since";
+
+        public const string IF_MATCH = "If-Match";
+
+        public const string IF_NONE_MATCH = "If-None-Match";
+
+        public const string TEXT_PLAIN = "text/plain";
+
+        public const string APPLICATION_OCTET_STREAM = "application/octet-stream";
+
+        public const string RANGE = "Range";
+
+        public const string VERSION_ID = "versionId";
+
+        public const string ENCODING_TYPE = "Encoding-type";
+
+        public const string PART_NUMBER_MARKER = "part-number-marker";
+
+        public const string MAX_PARTS = "max-parts";
+
+        public const string CONTENT_MD5 = "Content-MD5";
+
+        public const string RESPONSE_CONTENT_TYPE = "response-content-type";
+
+        public const string RESPONSE_CONTENT_LANGUAGE = "response-content-language";
+
+        public const string RESPONSE_CACHE_CONTROL = "response-cache-control";
+
+        public const string RESPONSE_CONTENT_DISPOSITION = "response-content-disposition";
+
+        public const string RESPONSE_CONTENT_ENCODING = "response-content-encoding";
+
+        public const string RESPONSE_EXPIRES = "response-expires";
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestHeaderKey.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f9e88db31fc6fce47891ff1481d963f9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 22 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestMethod.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+
+namespace COSXML.Common
+{
+    public sealed class CosRequestMethod
+    {
+        public const string GET = "GET";
+
+        public const string POST = "POST";
+
+        public const string PUT = "PUT";
+
+        public const string DELETE = "DELETE";
+
+        public const string HEAD = "HEAD";
+
+        public const string OPTIONS = "OPTIONS";
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosRequestMethod.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e4c937927203234459f6f590a33e9c7e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 30 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosStorageClass.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+using COSXML.Utils;
+
+namespace COSXML.Common
+{
+    public enum CosStorageClass
+    {
+        /// <summary>
+        /// 标准储存
+        /// </summary>
+        [CosValue("Standard")]
+        Standard = 0,
+
+        /// <summary>
+        /// 低频存储
+        /// </summary>
+        [CosValue("Standard_IA")]
+        StandardIA = 1,
+
+        /// <summary>
+        /// 归档储存
+        /// </summary>
+        [CosValue("ARCHIVE")]
+        Archive
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosStorageClass.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4c23a6f91cf4c2445b4491c043cc387a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 42 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosVersion.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Diagnostics;
+
+using System.Text;
+
+namespace COSXML.Common
+{
+    public sealed class CosVersion
+    {
+        private static string SDKVersion = "5.4.34.0";
+
+        public static string GetUserAgent()
+        {
+            StringBuilder userAgent = new StringBuilder();
+
+            userAgent.Append("cos-net-sdk").Append('.')
+                .Append(SDKVersion);
+
+            return userAgent.ToString();
+        }
+
+        //public static string GetOsVersion()
+        //{
+        //    try
+        //    {
+        //        var os = Environment.OSVersion;
+        //        return "windows " + os.Version.Major + "." + os.Version.Minor;
+        //    }
+        //    catch (InvalidOperationException)
+        //    {
+        //        return "Unknown OSVersion";
+        //    }
+        //}
+
+        //public static string GetOsArchitecture()
+        //{
+        //    return (IntPtr.Size == 8) ? "x86_64" : "x86";
+        //}
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Common/CosVersion.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9390d405a75b20d45ac1eb9f0b18228c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosException.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4e7cd594b54ca0843a2d18f148694e05
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 32 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosClientException.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text;
+
+namespace COSXML.CosException
+{
+    /// <summary>
+    /// 客户端异常,通常是指没有收到服务器响应的异常,比如网络异常、本地 IO 异常等。
+    /// </summary>
+    [Serializable]
+    public class CosClientException : System.ApplicationException
+    {
+        /// <summary>
+        /// 错误码
+        /// <see href="Common.CosClientError"/>
+        /// </summary>
+        public int errorCode;
+
+        public CosClientException(int errorCode, string message)
+            : base(message)
+        {
+            this.errorCode = errorCode;
+        }
+
+        public CosClientException(int errorCode, string message, Exception cause)
+            : base(message, cause)
+        {
+            this.errorCode = errorCode;
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosClientException.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ae39d191580dd6742ae1b9c94b285c27
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 100 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosServerException.cs

@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text;
+using COSXML.Model.Tag;
+
+namespace COSXML.CosException
+{
+    /// <summary>
+    /// 服务器异常,通常是一个非正确的服务器响应,例如权限错误、服务不可用等。
+    /// <see href="Model.Tag.CosServerError"/>
+    /// </summary>
+    [Serializable]
+    public class CosServerException : System.ApplicationException
+    {
+        /// <summary>
+        /// http status code
+        /// </summary>
+        public int statusCode;
+
+        /// <summary>
+        /// http status message
+        /// </summary>
+        public string statusMessage;
+
+        /// <summary>
+        /// cos server error code
+        /// </summary>
+        public string errorCode;
+
+        /// <summary>
+        /// cos server error message
+        /// </summary>
+        public string errorMessage;
+
+        /// <summary>
+        /// cos server requestId for tracking error
+        /// </summary>
+        public string requestId;
+
+        /// <summary>
+        /// cos server trace id
+        /// </summary>
+        public string traceId;
+
+        /// <summary>
+        /// cos server resuorce
+        /// </summary>
+        public string resource;
+
+        public CosServerException(int statusCode, string statusMessage, CosServerError serverError)
+            : this(statusCode, statusMessage)
+        {
+
+            if (serverError != null)
+            {
+                this.resource = serverError.resource;
+                this.errorCode = serverError.code;
+                this.errorMessage = serverError.message;
+                this.requestId = serverError.requestId;
+                this.traceId = serverError.traceId;
+            }
+        }
+
+        public CosServerException(int statusCode, string statusMessage)
+            : base("CosServerException: {" + statusCode + "} - {" + statusMessage + "}")
+        {
+            this.statusCode = statusCode;
+            this.statusMessage = statusMessage;
+        }
+
+        public void SetCosServerError(CosServerError serverError)
+        {
+
+            if (serverError != null)
+            {
+                this.resource = serverError.resource;
+                this.errorCode = serverError.code;
+                this.errorMessage = serverError.message;
+                this.requestId = serverError.requestId;
+                this.traceId = serverError.traceId;
+            }
+        }
+
+        public string GetInfo()
+        {
+            StringBuilder builder = new StringBuilder();
+
+            builder.Append("(")
+                .Append("statusCode = ").Append(statusCode).Append(", statusMessage = ").Append(statusMessage)
+                .Append(", errorCode = ").Append(errorCode).Append(", errorMessage = ").Append(errorMessage)
+                .Append(", requestId = ").Append(requestId).Append(", traceId = ").Append(traceId)
+                .Append(", resouce = ").Append(resource)
+                .Append(")");
+
+            return builder.ToString();
+        }
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosException/CosServerException.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fc41b2dd6697a99438b19f38c0f1a9c0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1216 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosXml.cs

@@ -0,0 +1,1216 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using COSXML.Model.Service;
+using COSXML.Model.Bucket;
+using COSXML.Model.Object;
+using COSXML.Model.CI;
+using COSXML.Model;
+using COSXML.Model.Tag;
+#if !COMPATIBLE
+using System.Threading.Tasks;
+#endif
+
+namespace COSXML
+{
+
+    /// <summary>
+    /// COS 接口类,实现 COS XML 的所有功能。
+    /// </summary>
+    public interface CosXml
+    {
+        /// <summary>
+        /// 获取配置项
+        /// </summary>
+        /// <returns></returns>
+        CosXmlConfig GetConfig();
+
+        /// <summary>
+        /// 生成签名串
+        /// </summary>
+        /// <param name="method">http method</param>
+        /// <param name="key">http url path</param>
+        /// <param name="queryParameters">http url query</param>
+        /// <param name="headers">http header</param>
+        /// <param name="signDurationSecond">sign time</param>
+        /// <returns></returns>
+        string GenerateSign(string method, string key, Dictionary<string, string> queryParameters, 
+                            Dictionary<string, string> headers, long signDurationSecond, long keyDurationSecond);
+
+        /// <summary>
+        /// 生成预签名URL
+        /// </summary>
+        /// <param name="preSignatureStruct">签名结构体</param>
+        /// <returns></returns>
+        string GenerateSignURL(PreSignatureStruct preSignatureStruct);
+
+        /// <summary>
+        /// 获取存储桶列表
+        /// </summary>
+        /// <param name="request"> <see href="COSXML.Model.Service.GetServiceRequest"/>GetServiceRequest </param>
+        /// <returns><see href="COSXML.Model.Service.GetServiceResult"/>GetServiceResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        GetServiceResult GetService(GetServiceRequest request);
+
+        /// <summary>
+        /// 获取存储桶列表的异步方法
+        /// </summary>
+        /// <param name="request">GetServiceRequest</param>
+        /// <param name="successCallback">OnSuccessCallback</param>
+        /// <param name="failCallback">OnFailedCallback</param>
+         
+        void GetService(GetServiceRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 创建存储桶
+        /// </summary>
+        /// <param name="request">PutBucketRequest</param>
+        /// <returns>PutBucketResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        PutBucketResult PutBucket(PutBucketRequest request);
+
+        /// <summary>
+        /// 创建存储桶的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucket(PutBucketRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 检索存储桶
+        /// </summary>
+        /// <param name="request">HeadBucketRequest</param>
+        /// <returns>HeadBucketResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        HeadBucketResult HeadBucket(HeadBucketRequest request);
+
+        /// <summary>
+        /// 检索存储桶的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void HeadBucket(HeadBucketRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 检查存储桶是否存在(只有同步方法)
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        bool DoesBucketExist(DoesBucketExistRequest request);
+
+        /// <summary>
+        /// 列出存储桶下的文件
+        /// </summary>
+        /// <param name="request">GetBucketRequest</param>
+        /// <returns>GetBucketResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        GetBucketResult GetBucket(GetBucketRequest request);
+
+        /// <summary>
+        /// 列出存储桶下文件的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucket(GetBucketRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除存储桶
+        /// </summary>
+        /// <param name="request">DeleteBucketRequest</param>
+        /// <returns>DeleteBucketResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        DeleteBucketResult DeleteBucket(DeleteBucketRequest request);
+
+        /// <summary>
+        /// 删除存储桶的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteBucket(DeleteBucketRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶权限
+        /// </summary>
+        /// <param name="request">PutBucketACLRequest</param>
+        /// <returns>PutBucketACLResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        PutBucketACLResult PutBucketACL(PutBucketACLRequest request);
+
+        /// <summary>
+        /// 设置存储桶权限的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketACL(PutBucketACLRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 查询存储桶权限
+        /// </summary>
+        /// <param name="request">GetBucketACLRequest</param>
+        /// <returns>GetBucketACLResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        GetBucketACLResult GetBucketACL(GetBucketACLRequest request);
+
+        /// <summary>
+        /// 查询存储桶权限的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketACL(GetBucketACLRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶的跨域规则
+        /// </summary>
+        /// <param name="request">PutBucketCORSRequest</param>
+        /// <returns>PutBucketCORSResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        PutBucketCORSResult PutBucketCORS(PutBucketCORSRequest request);
+
+        /// <summary>
+        /// 设置存储桶跨域规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketCORS(PutBucketCORSRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶跨域规则
+        /// </summary>
+        /// <param name="request">GetBucketCORSRequest</param>
+        /// <returns>GetBucketCORSResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        GetBucketCORSResult GetBucketCORS(GetBucketCORSRequest request);
+
+        /// <summary>
+        /// 获取存储桶跨域规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketCORS(GetBucketCORSRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除存储桶跨域规则
+        /// </summary>
+        /// <param name="request">DeleteBucketCORSRequest</param>
+        /// <returns>DeleteBucketCORSResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        DeleteBucketCORSResult DeleteBucketCORS(DeleteBucketCORSRequest request);
+
+        /// <summary>
+        /// 删除存储桶跨域规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteBucketCORS(DeleteBucketCORSRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶生命周期
+        /// </summary>
+        /// <param name="request">PutBucketLifecycleRequest</param>
+        /// <returns>PutBucketLifecycleResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        PutBucketLifecycleResult PutBucketLifecycle(PutBucketLifecycleRequest request);
+
+        /// <summary>
+        /// 设置存储桶生命周期的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketLifecycle(PutBucketLifecycleRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶生命周期规则
+        /// </summary>
+        /// <param name="request">GetBucketLifecycleRequest</param>
+        /// <returns>GetBucketLifecycleResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        GetBucketLifecycleResult GetBucketLifecycle(GetBucketLifecycleRequest request);
+
+        /// <summary>
+        /// 获取存储桶生命周期规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketLifecycle(GetBucketLifecycleRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除存储桶生命周期规则
+        /// </summary>
+        /// <param name="request">DeleteBucketLifecycleRequest</param>
+        /// <returns>DeleteBucketLifecycleResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        DeleteBucketLifecycleResult DeleteBucketLifecycle(DeleteBucketLifecycleRequest request);
+
+        /// <summary>
+        /// 删除存储桶生命周期规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteBucketLifecycle(DeleteBucketLifecycleRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶跨地域复制规则
+        /// </summary>
+        /// <param name="request">PutBucketReplicationRequest</param>
+        /// <returns>PutBucketReplicationResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        PutBucketReplicationResult PutBucketReplication(PutBucketReplicationRequest request);
+
+        /// <summary>
+        /// 设置存储桶跨地域复制规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketReplication(PutBucketReplicationRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶跨地域复制规则
+        /// </summary>
+        /// <param name="request">GetBucketReplicationRequest</param>
+        /// <returns>GetBucketReplicationResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        GetBucketReplicationResult GetBucketReplication(GetBucketReplicationRequest request);
+
+        /// <summary>
+        /// 获取存储桶跨地域复制规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketReplication(GetBucketReplicationRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除存储桶跨地域复制规则
+        /// </summary>
+        /// <param name="request">DeleteBucketReplicationRequest</param>
+        /// <returns>DeleteBucketReplicationResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        DeleteBucketReplicationResult DeleteBucketReplication(DeleteBucketReplicationRequest request);
+
+        /// <summary>
+        /// 删除存储桶跨地域复制规则的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteBucketReplication(DeleteBucketReplicationRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶多版本状态
+        /// </summary>
+        /// <param name="request">PutBucketVersioningRequest</param>
+        /// <returns>PutBucketVersioningResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        PutBucketVersioningResult PutBucketVersioning(PutBucketVersioningRequest request);
+
+        /// <summary>
+        /// 设置存储桶多版本状态的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketVersioning(PutBucketVersioningRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶多版本状态
+        /// </summary>
+        /// <param name="request">GetBucketVersioningRequest</param>
+        /// <returns>GetBucketVersioningResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        GetBucketVersioningResult GetBucketVersioning(GetBucketVersioningRequest request);
+
+        /// <summary>
+        /// 获取存储桶多版本状态的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketVersioning(GetBucketVersioningRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶防盗链
+        /// </summary>
+        /// <param name="request">PutBucketRefererRequest</param>
+        /// <returns>PutBucketRefererResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        PutBucketRefererResult PutBucketReferer(PutBucketRefererRequest request);
+
+        /// <summary>
+        /// 设置存储桶防盗链的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketReferer(PutBucketRefererRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶防盗链
+        /// </summary>
+        /// <param name="request">GetBucketRefererRequest</param>
+        /// <returns>GetBucketRefererResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        GetBucketRefererResult GetBucketReferer(GetBucketRefererRequest request);
+
+        /// <summary>
+        /// 获取存储桶防盗链的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketReferer(GetBucketRefererRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 列出多版本对象列表
+        /// </summary>
+        /// <param name="request">ListBucketVersionsRequest</param>
+        /// <returns>ListBucketVersionsResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception> 
+        ListBucketVersionsResult ListBucketVersions(ListBucketVersionsRequest request);
+
+        /// <summary>
+        /// 列出多版本对象列表的异步方法
+        /// </summary>
+        /// <param name="request">ListBucketVersionsRequest</param>
+        /// <param name="successCallback">successCallback</param>
+        /// <param name="failCallback">failCallback</param>
+         
+        void ListBucketVersions(ListBucketVersionsRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 列出所有未完成的分片上传任务
+        /// </summary>
+        /// <param name="request">ListMultiUploadsRequest</param>
+        /// <returns>ListMultiUploadsResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        ListMultiUploadsResult ListMultiUploads(ListMultiUploadsRequest request);
+
+        /// <summary>
+        /// 列出所有未完成的分片上传任务的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void ListMultiUploads(ListMultiUploadsRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 简单上传对象
+        /// </summary>
+        /// <param name="request">PutObjectRequest</param>
+        /// <returns>PutObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        PutObjectResult PutObject(PutObjectRequest request);
+
+        /// <summary>
+        /// 简单上传对象的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutObject(PutObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 检索对象属性
+        /// </summary>
+        /// <param name="request">HeadObjectRequest</param>
+        /// <returns>HeadObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        HeadObjectResult HeadObject(HeadObjectRequest request);
+
+        /// <summary>
+        /// 检索对象属性的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void HeadObject(HeadObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 检查对象是否存在(只支持同步方法)
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+        bool DoesObjectExist(DoesObjectExistRequest request);
+
+        /// <summary>
+        /// 下载对象
+        /// </summary>
+        /// <param name="request">GetObjectRequest</param>
+        /// <returns>GetObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        GetObjectResult GetObject(GetObjectRequest request);
+
+        /// <summary>
+        /// 下载对象的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetObject(GetObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 下载对象到内存中
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns>GetObjectBytesResult</returns>
+        GetObjectBytesResult GetObject(GetObjectBytesRequest request);
+
+        /// <summary>
+        /// 下载对象到内存中的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetObject(GetObjectBytesRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取对象访问URL
+        /// </summary>
+        /// <param name="bucket">bucket</param>
+        /// <param name="key">object key</param>
+        /// <returns></returns>
+        string GetObjectUrl(string bucket, string key);
+
+        /// <summary>
+        /// 设置对象 ACL 权限
+        /// </summary>
+        /// <param name="request">PutObjectACLRequest</param>
+        /// <returns>PutObjectACLResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        PutObjectACLResult PutObjectACL(PutObjectACLRequest request);
+
+        /// <summary>
+        /// 设置对象 ACL 权限的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutObjectACL(PutObjectACLRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// Append上传对象
+        /// </summary>
+        /// <param name="request"></param>
+        AppendObjectResult AppendObject(AppendObjectRequest request);
+
+        /// <summary>
+        /// 获取对象 ACL 权限
+        /// </summary>
+        /// <param name="request">GetObjectACLRequest</param>
+        /// <returns>GetObjectACLResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        GetObjectACLResult GetObjectACL(GetObjectACLRequest request);
+
+        /// <summary>
+        /// 获取对象 ACL 权限的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetObjectACL(GetObjectACLRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置对象标签的同步方法
+        /// </summary>
+        /// <param name="request"></param>
+        PutObjectTaggingResult PutObjectTagging(PutObjectTaggingRequest request);
+
+        /// <summary>
+        /// 设置对象标签的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+        void PutObjectTagging(PutObjectTaggingRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取对象标签的同步方法
+        /// </summary>
+        /// <param name="request"></param>
+        GetObjectTaggingResult GetObjectTagging(GetObjectTaggingRequest request);
+
+        /// <summary>
+        /// 获取对象标签的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+        void GetObjectTagging(GetObjectTaggingRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除对象标签的同步方法
+        /// </summary>
+        /// <param name="request"></param>
+        DeleteObjectTaggingResult DeleteObjectTagging(DeleteObjectTaggingRequest request);
+
+        /// <summary>
+        /// 删除对象标签的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+        void DeleteObjectTagging(DeleteObjectTaggingRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除对象
+        /// </summary>
+        /// <param name="request">DeleteObjectRequest</param>
+        /// <returns>DeleteObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        DeleteObjectResult DeleteObject(DeleteObjectRequest request);
+
+        /// <summary>
+        /// 删除对象的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteObject(DeleteObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 批量删除对象
+        /// </summary>
+        /// <param name="request">DeleteMultiObjectRequest</param>
+        /// <returns>DeleteMultiObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        DeleteMultiObjectResult DeleteMultiObjects(DeleteMultiObjectRequest request);
+
+        /// <summary>
+        /// 批量删除对象的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteMultiObjects(DeleteMultiObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 初始化分片上传任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        InitMultipartUploadResult InitMultipartUpload(InitMultipartUploadRequest request);
+
+        /// <summary>
+        /// 初始化分片上传任务的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void InitMultipartUpload(InitMultipartUploadRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 列出已上传的分片
+        /// </summary>
+        /// <param name="request">ListPartsRequest</param>
+        /// <returns>ListPartsResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        ListPartsResult ListParts(ListPartsRequest request);
+
+        /// <summary>
+        /// 列出已上传的分片的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void ListParts(ListPartsRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 上传分片
+        /// </summary>
+        /// <param name="request">UploadPartRequest</param>
+        /// <returns>UploadPartResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        UploadPartResult UploadPart(UploadPartRequest request);
+
+        /// <summary>
+        /// 上传分片的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void UploadPart(UploadPartRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 完成分片上传
+        /// </summary>
+        /// <param name="request">CompleteMultiUploadRequest</param>
+        /// <returns>CompleteMultiUploadResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        CompleteMultipartUploadResult CompleteMultiUpload(CompleteMultipartUploadRequest request);
+
+        /// <summary>
+        /// 完成分片上传的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void CompleteMultiUpload(CompleteMultipartUploadRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 终止分片上传
+        /// </summary>
+        /// <param name="request">AbortMultiUploadRequest</param>
+        /// <returns>AbortMultiUploadResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        AbortMultipartUploadResult AbortMultiUpload(AbortMultipartUploadRequest request);
+
+        /// <summary>
+        /// 终止分片上传的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void AbortMultiUpload(AbortMultipartUploadRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 复制对象
+        /// </summary>
+        /// <param name="request">CopyObjectRequest</param>
+        /// <returns>CopyObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        CopyObjectResult CopyObject(CopyObjectRequest request);
+
+        /// <summary>
+        /// 复制对象的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void CopyObject(CopyObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 拷贝一个分片
+        /// </summary>
+        /// <param name="request">UploadPartCopyRequest</param>
+        /// <returns>UploadPartCopyResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        UploadPartCopyResult PartCopy(UploadPartCopyRequest request);
+
+        /// <summary>
+        /// 拷贝一个分片的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PartCopy(UploadPartCopyRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 对象的跨域预请求
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        OptionObjectResult OptionObject(OptionObjectRequest request);
+
+        /// <summary>
+        /// 对象的跨域预请求的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void OptionObject(OptionObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// POST 方式上传对象
+        /// </summary>
+        /// <param name="request">PostObjectRequest</param>
+        /// <returns>PostObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        PostObjectResult PostObject(PostObjectRequest request);
+
+        /// <summary>
+        /// POST 方式上传对象的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PostObject(PostObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 对一个归档存储(ARCHIVE)类型的对象进行恢复
+        /// </summary>
+        /// <param name="request">RestoreObjectRequest</param>
+        /// <returns>RestoreObjectResult</returns>
+        /// <exception cref="COSXML.CosException.CosServerException">CosServerException</exception>
+        /// <exception cref="COSXML.CosException.CosClientException">CosClientException</exception>
+        RestoreObjectResult RestoreObject(RestoreObjectRequest request);
+
+        /// <summary>
+        /// 对一个归档存储(ARCHIVE)类型的对象进行恢复的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void RestoreObject(RestoreObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶静态网站
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns>设置结果</returns>
+        PutBucketWebsiteResult PutBucketWebsite(PutBucketWebsiteRequest request);
+
+        /// <summary>
+        /// 设置存储桶静态网站的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketWebsiteAsync(PutBucketWebsiteRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶静态网站设置
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns>静态</returns>
+        GetBucketWebsiteResult GetBucketWebsite(GetBucketWebsiteRequest request);
+
+        /// <summary>
+        /// 获取存储桶静态网站设置的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketWebsiteAsync(GetBucketWebsiteRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除存储桶静态网站设置
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        DeleteBucketWebsiteResult DeleteBucketWebsite(DeleteBucketWebsiteRequest request);
+
+        /// <summary>
+        /// 删除存储桶静态网站设置的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteBucketWebsiteAsync(DeleteBucketWebsiteRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶自定义域名
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        PutBucketDomainResult PutBucketDomain(PutBucketDomainRequest request);
+
+        /// <summary>
+        /// 设置存储桶自定义域名的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketDomainAsync(PutBucketDomainRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶自定义域名
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetBucketDomainResult GetBucketDomain(GetBucketDomainRequest request);
+
+        /// <summary>
+        /// 获取存储桶自定义域名的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketDomainAsync(GetBucketDomainRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶日志服务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        PutBucketLoggingResult PutBucketLogging(PutBucketLoggingRequest request);
+
+        /// <summary>
+        /// 设置存储桶日志服务的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketLoggingAsync(PutBucketLoggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶日志服务设置
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetBucketLoggingResult GetBucketLogging(GetBucketLoggingRequest request);
+
+        /// <summary>
+        /// 获取存储桶日志服务设置的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketLoggingAsync(GetBucketLoggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶清单任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        PutBucketInventoryResult PutBucketInventory(PutBucketInventoryRequest request);
+
+        /// <summary>
+        /// 设置存储桶清单任务的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketInventoryAsync(PutBucketInventoryRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶清单任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetBucketInventoryResult GetBucketInventory(GetBucketInventoryRequest request);
+
+        /// <summary>
+        /// 获取存储桶清单任务的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketInventoryAsync(GetBucketInventoryRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除存储桶清单任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        DeleteBucketInventoryResult DeleteBucketInventory(DeleteBucketInventoryRequest request);
+
+        /// <summary>
+        /// 删除存储桶清单任务的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteInventoryAsync(DeleteBucketInventoryRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 列出存储桶所有清单任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        ListBucketInventoryResult ListBucketInventory(ListBucketInventoryRequest request);
+
+        /// <summary>
+        /// 列出存储桶所有清单任务的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void ListBucketInventoryAsync(ListBucketInventoryRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 设置存储桶标签
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        PutBucketTaggingResult PutBucketTagging(PutBucketTaggingRequest request);
+
+        /// <summary>
+        /// 设置存储桶标签的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void PutBucketTaggingAsync(PutBucketTaggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取存储桶标签
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetBucketTaggingResult GetBucketTagging(GetBucketTaggingRequest request);
+
+        /// <summary>
+        /// 获取存储桶标签的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void GetBucketTaggingAsync(GetBucketTaggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 删除存储桶标签
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        DeleteBucketTaggingResult DeleteBucketTagging(DeleteBucketTaggingRequest request);
+
+        /// <summary>
+        /// 删除存储桶标签的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void DeleteBucketTaggingAsync(DeleteBucketTaggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 检索对象
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        SelectObjectResult SelectObject(SelectObjectRequest request);
+
+        /// <summary>
+        /// 检索对象的异步方法
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="successCallback"></param>
+        /// <param name="failCallback"></param>
+         
+        void SelectObjectAsync(SelectObjectRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback);
+
+        /// <summary>
+        /// 获取智能分层配置
+        /// </summary>
+        /// <param name="request"></param>
+        GetBucketIntelligentTieringResult GetBucketIntelligentTieringConfiguration(GetBucketIntelligentTieringRequest request);
+
+        /// <summary>
+        /// 设置存储桶智能分层
+        /// </summary>
+        /// <param name="request"></param>
+        CosResult PutBucketIntelligentTiering(PutBucketIntelligentTieringRequest request);
+
+        /// <summary>
+        /// 内容识别
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        SensitiveContentRecognitionResult SensitiveContentRecognition(SensitiveContentRecognitionRequest request);
+
+        /// <summary>
+        /// 图片处理
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        ImageProcessResult ImageProcess(ImageProcessRequest request);
+
+        /// <summary>
+        /// 下载时进行二维码识别
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        QRCodeRecognitionResult QRCodeRecognition(QRCodeRecognitionRequest request);
+
+        /// <summary>
+        /// 获取媒体文件某个时间的截图
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetSnapshotResult GetSnapshot(GetSnapshotRequest request);
+
+        /// <summary>
+        /// 获取媒体文件的信息
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetMediaInfoResult GetMediaInfo(GetMediaInfoRequest request);
+
+        /// <summary>
+        /// 提交视频审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        SubmitCensorJobResult SubmitVideoCensorJob(SubmitVideoCensorJobRequest request);
+
+        /// <summary>
+        /// 获取视频审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetVideoCensorJobResult GetVideoCensorJob(GetVideoCensorJobRequest request);
+
+        /// <summary>
+        /// 提交音频审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        SubmitCensorJobResult SubmitAudioCensorJob(SubmitAudioCensorJobRequest request);
+
+        /// <summary>
+        /// 获取音频审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetAudioCensorJobResult GetAudioCensorJob(GetAudioCensorJobRequest request);
+
+        /// <summary>
+        /// 提交文本审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        SubmitCensorJobResult SubmitTextCensorJob(SubmitTextCensorJobRequest request);
+        
+        /// <summary>
+        /// 提交文本审核任务, 支持同步返回
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        SubmitTextCensorJobsResult SubmitTextCensorJobSync(SubmitTextCensorJobRequest request);
+
+        /// <summary>
+        /// 获取文本审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetTextCensorJobResult GetTextCensorJob(GetTextCensorJobRequest request);
+
+        /// <summary>
+        /// 提交文档审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        SubmitCensorJobResult SubmitDocumentCensorJob(SubmitDocumentCensorJobRequest request);
+
+        /// <summary>
+        /// 获取文档审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        GetDocumentCensorJobResult GetDocumentCensorJob(GetDocumentCensorJobRequest request);
+
+        /// <summary>
+        /// 获取媒体bucket列表
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        DescribeMediaBucketsResult DescribeMediaBuckets(DescribeMediaBucketsRequest request);
+
+        /// <summary>
+        /// 取消请求
+        /// </summary>
+        /// <param name="cosRequest"></param>
+        void Cancel(CosRequest cosRequest);
+
+        /// <summary>
+        /// 同步执行请求
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        T Execute<T>(CosRequest request) where T : CosResult;
+
+        #if !COMPATIBLE
+        /// <summary>
+        /// 异步执行请求
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        Task<T> ExecuteAsync<T>(CosRequest request) where T : CosResult;
+        #endif
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosXml.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 335d2a95bcbaa9c428b4095b60c8831b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 345 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosXmlConfig.cs

@@ -0,0 +1,345 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Network;
+
+namespace COSXML
+{
+    /// <summary>
+    /// COSXML 服务配置类
+    /// </summary>
+    public sealed class CosXmlConfig
+    {
+        private HttpClientConfig httpConfig;
+
+        private string appid;
+
+        private string region;
+
+        private bool isHttps = true;
+
+        private bool isDebug;
+
+        /// <summary>
+        /// 读取 Endpoint 后缀
+        /// </summary>
+        /// <value></value>
+        public string endpointSuffix { get; private set; }
+
+        /// <summary>
+        /// 获取完整请求域名
+        /// </summary>
+        /// <value></value>
+        public string host { get; private set; }
+
+        private CosXmlConfig(Builder builder)
+        {
+            this.appid = builder.appid;
+            this.region = builder.region;
+            this.isHttps = builder.isHttps;
+            this.httpConfig = builder.httpClientConfigBuilder.Build();
+            this.isDebug = builder.isDebug;
+            this.endpointSuffix = builder.endpointSuffix;
+            this.host = builder.host;
+        }
+
+        /// <summary>
+        /// 获取 AppID
+        /// </summary>
+        /// <value></value>
+        public string Appid
+        {
+            get
+            {
+                return appid;
+            }
+        }
+
+        /// <summary>
+        /// 获取 Region
+        /// </summary>
+        /// <value></value>
+        public string Region
+        {
+            get
+            {
+                return region;
+            }
+        }
+
+        /// <summary>
+        /// 获取是否开启 Https
+        /// </summary>
+        /// <value></value>
+        public bool IsHttps
+        {
+            get
+            {
+                return isHttps;
+            }
+        }
+
+        /// <summary>
+        /// 获取 HttpClient 配置
+        /// </summary>
+        /// <value></value>
+        public HttpClientConfig HttpConfig
+        {
+            get
+            {
+                return httpConfig;
+            }
+        }
+
+        /// <summary>
+        /// 获取是否开启 DEBUG 日志
+        /// </summary>
+        /// <value></value>
+        public bool IsDebugLog
+        {
+            get
+            {
+                return isDebug;
+            }
+        }
+
+        /// <summary>
+        /// Config 构造器
+        /// </summary>
+        public sealed class Builder
+        {
+            internal string appid;
+
+            internal string region;
+
+            internal bool isHttps = true;
+
+            internal HttpClientConfig.Builder httpClientConfigBuilder;
+
+            internal bool isDebug = false;
+
+            internal string endpointSuffix;
+
+            internal string host;
+
+            /// <summary>
+            /// 初始化一个构造器
+            /// </summary>
+            public Builder()
+            {
+                httpClientConfigBuilder = new HttpClientConfig.Builder();
+            }
+
+            /// <summary>
+            /// cos 服务的Appid
+            /// </summary>
+            /// <param name="appid"></param>
+            /// <returns></returns>
+            public Builder SetAppid(string appid)
+            {
+                this.appid = appid;
+
+                return this;
+            }
+
+            /// <summary>
+            /// 存储桶所属地域
+            /// </summary>
+            /// <param name="region"></param>
+            /// <returns></returns>
+            public Builder SetRegion(string region)
+            {
+                //region cannot be empty
+                if(region == null || region == "") {
+                    throw new CosException.CosClientException(
+                        (int)COSXML.Common.CosClientError.InvalidArgument,
+                        "region cannot be empty"
+                    );
+                }
+                this.region = region;
+
+                return this;
+            }
+
+            /// <summary>
+            /// true:https请求
+            /// </summary>
+            /// <param name="isHttps"></param>
+            /// <returns></returns>
+            public Builder IsHttps(bool isHttps)
+            {
+                this.isHttps = isHttps;
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置最大连接数,默认值 512
+            /// </summary>
+            /// <param name="connectionLimit"></param>
+            /// <returns></returns>
+            public Builder SetConnectionLimit(int connectionLimit)
+            {
+                this.httpClientConfigBuilder.SetConnectionLimit(connectionLimit);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 TCP 连接超时时间,单位是毫秒,默认 45 秒
+            /// </summary>
+            /// <param name="connectionTimeoutMs"></param>
+            /// <returns></returns>
+            public Builder SetConnectionTimeoutMs(int connectionTimeoutMs)
+            {
+                this.httpClientConfigBuilder.SetConnectionTimeoutMs(connectionTimeoutMs);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 TCP 连接读写时间,单位是毫秒,默认 45 秒
+            /// </summary>
+            /// <param name="readWriteTimeoutMs"></param>
+            /// <returns></returns>
+            public Builder SetReadWriteTimeoutMs(int readWriteTimeoutMs)
+            {
+                this.httpClientConfigBuilder.SetReadWriteTimeoutMs(readWriteTimeoutMs);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置是否使用 Keep-Alive 长连接
+            /// </summary>
+            /// <param name="keepAlive"></param>
+            /// <returns></returns>
+            public Builder SetHttpKeepAlive(bool keepAlive)
+            {
+                this.httpClientConfigBuilder.SetHttpKeepAlive(keepAlive);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 HTTP 代理主机
+            /// </summary>
+            /// <param name="host"></param>
+            /// <returns></returns>
+            public Builder SetProxyHost(string host)
+            {
+                this.httpClientConfigBuilder.SetProxyHost(host);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 HTTP 代理端口
+            /// </summary>
+            /// <param name="port"></param>
+            /// <returns></returns>
+            public Builder SetProxyPort(int port)
+            {
+                this.httpClientConfigBuilder.SetProxyPort(port);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 HTTP 代理用户名
+            /// </summary>
+            /// <param name="userName"></param>
+            /// <returns></returns>
+            public Builder SetProxyUserName(string userName)
+            {
+                this.httpClientConfigBuilder.SetProxyUserName(userName);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 HTTP 代理用户密码
+            /// </summary>
+            /// <param name="password"></param>
+            /// <returns></returns>
+            public Builder SetProxyUserPassword(string password)
+            {
+                this.httpClientConfigBuilder.SetProxyUserPassword(password);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 HTTP 代理 Domain
+            /// </summary>
+            /// <param name="domain"></param>
+            /// <returns></returns>
+            public Builder SetProxyDomain(string domain)
+            {
+                this.httpClientConfigBuilder.SetProxyDomain(domain);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置是否允许请求重定向
+            /// </summary>
+            /// <param name="isAllow"></param>
+            /// <returns></returns>
+            public Builder SetAllowAutoRedirect(bool isAllow)
+            {
+                this.httpClientConfigBuilder.AllowAutoRedirect(isAllow);
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置是否开启 DEBUG 日志
+            /// </summary>
+            /// <param name="isDebug"></param>
+            /// <returns></returns>
+            public Builder SetDebugLog(bool isDebug)
+            {
+                this.isDebug = isDebug;
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置 Endpoint 后缀,最终请求域名为 $Bucket.$EndpointSuffix
+            /// </summary>
+            /// <param name="suffix"></param>
+            /// <returns></returns>
+            public Builder SetEndpointSuffix(string suffix)
+            {
+                this.endpointSuffix = suffix;
+
+                return this;
+            }
+
+            /// <summary>
+            /// 设置完整请求域名
+            /// </summary>
+            /// <param name="host"></param>
+            /// <returns></returns>
+            public Builder SetHost(string host)
+            {
+                this.host = host;
+
+                return this;
+            }
+
+            /// <summary>
+            /// 构建 Config
+            /// </summary>
+            /// <returns></returns>
+            public CosXmlConfig Build()
+            {
+
+                return new CosXmlConfig(this);
+            }
+
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosXmlConfig.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 94594b96fe40e854f802c499f75541bc
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1324 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosXmlServer.cs

@@ -0,0 +1,1324 @@
+using System;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using System.Text;
+using COSXML.Network;
+using COSXML.Model;
+using COSXML.Model.CI;
+using COSXML.Model.Service;
+using COSXML.Model.Object;
+using COSXML.Model.Bucket;
+using COSXML.Auth;
+using COSXML.Log;
+using COSXML.Utils;
+using COSXML.CosException;
+using COSXML.Common;
+using COSXML.Model.Tag;
+using COSXML.Callback;
+using System.Diagnostics.CodeAnalysis;
+
+#if !COMPATIBLE
+using System.Threading.Tasks;
+#endif
+
+namespace COSXML
+{
+    /// <summary>
+    /// CosXml 实现类
+    /// </summary>
+    public class CosXmlServer : CosXml
+    {
+        private CosXmlConfig config;
+
+        private QCloudCredentialProvider credentialProvider;
+
+        private HttpClient httpClient;
+
+        /// <summary>
+        /// 创建一个新实例
+        /// </summary>
+        /// <param name="config">服务配置</param>
+        /// <param name="qcloudCredentailProvider">凭证提供者</param>
+        public CosXmlServer(CosXmlConfig config, QCloudCredentialProvider qcloudCredentailProvider)
+        {
+
+            if (config == null)
+            {
+                throw new CosClientException((int) CosClientError.InvalidArgument, "Config is null.");
+            }
+            
+            this.config = config;
+
+            if (this.config.IsDebugLog)
+            {
+                QLog.AddLogAdapter(new LogImpl());
+            }
+
+            this.credentialProvider = qcloudCredentailProvider;
+            httpClient = HttpClient.GetInstance();
+            httpClient.Init(this.config.HttpConfig);
+        }
+
+        /// <summary>
+        /// 获取配置
+        /// </summary>
+        /// <returns></returns>
+        public CosXmlConfig GetConfig()
+        {
+
+            return config;
+        }
+
+        private void CheckAppidAndRegion(CosRequest request)
+        {
+            request.serviceConfig = config;
+
+            if (request.IsHttps == null)
+            {
+                request.IsHttps = config.IsHttps;
+            }
+
+            if (request is GetServiceRequest)
+            {
+
+                return;
+            }
+
+            if (request.APPID == null)
+            {
+                request.APPID = config.Appid;
+            }
+
+            if (request is ObjectRequest)
+            {
+
+                if (((ObjectRequest)request).Region == null)
+                {
+                    ((ObjectRequest)request).Region = config.Region;
+                }
+
+                return;
+            }
+
+            if (request is BucketRequest)
+            {
+
+                if (((BucketRequest)request).Region == null)
+                {
+                    ((BucketRequest)request).Region = config.Region;
+                }
+
+                return;
+            }
+
+        }
+
+#if !COMPATIBLE
+        public Task<T> ExecuteAsync<T>(CosRequest request) where T : CosResult
+        {
+            T result = Activator.CreateInstance<T>();
+
+            CheckAppidAndRegion(request);
+
+            var t = new TaskCompletionSource<T>();
+
+
+            Schedue(request, result,
+                delegate(CosResult cosResult)
+                {
+                    t.TrySetResult(result as T);
+                }
+
+                , delegate(CosClientException clientException, CosServerException serverException)
+                {
+
+                    if (clientException != null)
+                    {
+                        t.TrySetException(clientException);
+                    }
+                    else
+                    {
+                        t.TrySetException(serverException);
+                    }
+                }
+            );
+
+            return t.Task;
+        }
+#endif
+
+        public T Execute<T>(CosRequest request) where T : CosResult
+        {
+            T result = Activator.CreateInstance<T>();
+
+
+            return (T)Excute(request, result);
+        }
+
+        private T Execute<T>(CosRequest request, T result) where T : CosResult
+        {
+
+            return (T)Excute(request, result);
+        }
+
+        private CosResult Excute(CosRequest request, CosResult result)
+        {
+            CheckAppidAndRegion(request);
+            httpClient.Excute(request, result, credentialProvider);
+
+            return result;
+        }
+
+        private void Schedue(CosRequest request, CosResult result, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback)
+        {
+            CheckAppidAndRegion(request);
+            httpClient.Schedue(request, result, successCallback, failCallback, credentialProvider);
+        }
+
+        public Model.Service.GetServiceResult GetService(Model.Service.GetServiceRequest request)
+        {
+
+            return (Model.Service.GetServiceResult)Excute(request, new Model.Service.GetServiceResult());
+        }
+
+         
+        public void GetService(Model.Service.GetServiceRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetServiceResult(), successCallback, failCallback);
+        }
+
+        public PutBucketResult PutBucket(PutBucketRequest request)
+        {
+
+            return (Model.Bucket.PutBucketResult)Excute(request, new Model.Bucket.PutBucketResult());
+        }
+
+         
+        public void PutBucket(PutBucketRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutBucketResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketResult DeleteBucket(DeleteBucketRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketResult)Excute(request, new Model.Bucket.DeleteBucketResult());
+        }
+
+         
+        public void DeleteBucket(DeleteBucketRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteBucketResult(), successCallback, failCallback);
+        }
+
+        public HeadBucketResult HeadBucket(HeadBucketRequest request)
+        {
+
+            return (Model.Bucket.HeadBucketResult)Excute(request, new Model.Bucket.HeadBucketResult());
+        }
+
+        public bool DoesBucketExist(DoesBucketExistRequest request)
+        {
+            try {
+                CosResult result = Excute(request, new Model.Bucket.HeadBucketResult());
+                if (result.httpCode == 200) {
+                    return true;
+                }
+                return false;
+            }
+            catch (CosServerException serverEx) {
+                if (serverEx.statusCode == 404) {
+                    return false;
+                } else {
+                    throw serverEx;
+                }
+            }
+            catch (Exception e) {
+                throw e;
+            }
+        }
+
+         
+        public void HeadBucket(HeadBucketRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new HeadBucketResult(), successCallback, failCallback);
+        }
+
+        public GetBucketResult GetBucket(GetBucketRequest request)
+        {
+
+            return (Model.Bucket.GetBucketResult)Excute(request, new Model.Bucket.GetBucketResult());
+        }
+
+         
+        public void GetBucket(GetBucketRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetBucketResult(), successCallback, failCallback);
+        }
+
+        public PutBucketACLResult PutBucketACL(PutBucketACLRequest request)
+        {
+
+            return (Model.Bucket.PutBucketACLResult)Excute(request, new Model.Bucket.PutBucketACLResult());
+        }
+
+         
+        public void PutBucketACL(PutBucketACLRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutBucketACLResult(), successCallback, failCallback);
+        }
+
+        public GetBucketACLResult GetBucketACL(GetBucketACLRequest request)
+        {
+
+            return (Model.Bucket.GetBucketACLResult)Excute(request, new Model.Bucket.GetBucketACLResult());
+        }
+
+         
+        public void GetBucketACL(GetBucketACLRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetBucketACLResult(), successCallback, failCallback);
+        }
+
+        public PutBucketCORSResult PutBucketCORS(PutBucketCORSRequest request)
+        {
+
+            return (Model.Bucket.PutBucketCORSResult)Excute(request, new Model.Bucket.PutBucketCORSResult());
+        }
+
+         
+        public void PutBucketCORS(PutBucketCORSRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutBucketCORSResult(), successCallback, failCallback);
+        }
+
+        public GetBucketCORSResult GetBucketCORS(GetBucketCORSRequest request)
+        {
+
+            return (Model.Bucket.GetBucketCORSResult)Excute(request, new Model.Bucket.GetBucketCORSResult());
+        }
+
+         
+        public void GetBucketCORS(GetBucketCORSRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetBucketCORSResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketCORSResult DeleteBucketCORS(DeleteBucketCORSRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketCORSResult)Excute(request, new Model.Bucket.DeleteBucketCORSResult());
+        }
+
+         
+        public void DeleteBucketCORS(DeleteBucketCORSRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteBucketCORSResult(), successCallback, failCallback);
+        }
+
+        public PutBucketLifecycleResult PutBucketLifecycle(PutBucketLifecycleRequest request)
+        {
+
+            return (Model.Bucket.PutBucketLifecycleResult)Excute(request, new Model.Bucket.PutBucketLifecycleResult());
+        }
+
+         
+        public void PutBucketLifecycle(PutBucketLifecycleRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutBucketLifecycleResult(), successCallback, failCallback);
+        }
+
+        public GetBucketLifecycleResult GetBucketLifecycle(GetBucketLifecycleRequest request)
+        {
+
+            return (Model.Bucket.GetBucketLifecycleResult)Excute(request, new Model.Bucket.GetBucketLifecycleResult());
+        }
+
+         
+        public void GetBucketLifecycle(GetBucketLifecycleRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetBucketLifecycleResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketLifecycleResult DeleteBucketLifecycle(DeleteBucketLifecycleRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketLifecycleResult)Excute(request, new Model.Bucket.DeleteBucketLifecycleResult());
+        }
+
+         
+        public void DeleteBucketLifecycle(DeleteBucketLifecycleRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteBucketLifecycleResult(), successCallback, failCallback);
+        }
+
+        public PutBucketReplicationResult PutBucketReplication(PutBucketReplicationRequest request)
+        {
+
+            return (Model.Bucket.PutBucketReplicationResult)Excute(request, new Model.Bucket.PutBucketReplicationResult());
+        }
+
+         
+        public void PutBucketReplication(PutBucketReplicationRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutBucketReplicationResult(), successCallback, failCallback);
+        }
+
+        public GetBucketReplicationResult GetBucketReplication(GetBucketReplicationRequest request)
+        {
+
+            return (Model.Bucket.GetBucketReplicationResult)Excute(request, new Model.Bucket.GetBucketReplicationResult());
+        }
+
+         
+        public void GetBucketReplication(GetBucketReplicationRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetBucketReplicationResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketReplicationResult DeleteBucketReplication(DeleteBucketReplicationRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketReplicationResult)Excute(request, new Model.Bucket.DeleteBucketReplicationResult());
+        }
+
+         
+        public void DeleteBucketReplication(DeleteBucketReplicationRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteBucketReplicationResult(), successCallback, failCallback);
+        }
+
+        public PutBucketVersioningResult PutBucketVersioning(PutBucketVersioningRequest request)
+        {
+
+            return (Model.Bucket.PutBucketVersioningResult)Excute(request, new Model.Bucket.PutBucketVersioningResult());
+        }
+
+         
+        public void PutBucketVersioning(PutBucketVersioningRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutBucketVersioningResult(), successCallback, failCallback);
+        }
+
+        public GetBucketVersioningResult GetBucketVersioning(GetBucketVersioningRequest request)
+        {
+
+            return (Model.Bucket.GetBucketVersioningResult)Excute(request, new Model.Bucket.GetBucketVersioningResult());
+        }
+
+         
+        public void GetBucketVersioning(GetBucketVersioningRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetBucketVersioningResult(), successCallback, failCallback);
+        }
+
+        public ListBucketVersionsResult ListBucketVersions(ListBucketVersionsRequest request)
+        {
+
+            return (Model.Bucket.ListBucketVersionsResult)Excute(request, new Model.Bucket.ListBucketVersionsResult());
+        }
+
+         
+        public void ListBucketVersions(ListBucketVersionsRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new ListBucketVersionsResult(), successCallback, failCallback);
+        }
+
+        public ListMultiUploadsResult ListMultiUploads(ListMultiUploadsRequest request)
+        {
+
+            return (Model.Bucket.ListMultiUploadsResult)Excute(request, new Model.Bucket.ListMultiUploadsResult());
+        }
+
+        public PutBucketRefererResult PutBucketReferer(PutBucketRefererRequest request)
+        {
+
+            return (Model.Bucket.PutBucketRefererResult)Excute(request, new Model.Bucket.PutBucketRefererResult());
+        }
+
+        public void PutBucketReferer(PutBucketRefererRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutBucketRefererResult(), successCallback, failCallback);
+        }
+
+        public GetBucketRefererResult GetBucketReferer(GetBucketRefererRequest request)
+        {
+
+            return (Model.Bucket.GetBucketRefererResult)Excute(request, new Model.Bucket.GetBucketRefererResult());
+        }
+
+        public void GetBucketReferer(GetBucketRefererRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetBucketRefererResult(), successCallback, failCallback);
+        }
+         
+        public void ListMultiUploads(ListMultiUploadsRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new ListMultiUploadsResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketPolicyResult DeleteBucketPolicy(DeleteBucketPolicyRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketPolicyResult)Excute(request, new Model.Bucket.DeleteBucketPolicyResult());
+        }
+
+         
+        public void DeleteBucketPolicy(DeleteBucketPolicyRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteBucketPolicyResult(), successCallback, failCallback);
+        }
+
+        public PutObjectResult PutObject(PutObjectRequest request)
+        {
+
+            return (Model.Object.PutObjectResult)Excute(request, new Model.Object.PutObjectResult());
+        }
+
+         
+        public void PutObject(PutObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutObjectResult(), successCallback, failCallback);
+        }
+
+         
+        public void AppendObject(AppendObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback) 
+        {
+            Schedue(request, new AppendObjectResult(), successCallback, failCallback);
+        }
+        
+        public AppendObjectResult AppendObject(AppendObjectRequest request) 
+        {
+
+            return (Model.Object.AppendObjectResult)Excute(request, new Model.Object.AppendObjectResult());
+        }
+
+        public HeadObjectResult HeadObject(HeadObjectRequest request)
+        {
+
+            return (Model.Object.HeadObjectResult)Excute(request, new Model.Object.HeadObjectResult());
+        }
+
+         
+        public void HeadObject(HeadObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new HeadObjectResult(), successCallback, failCallback);
+        }
+
+        public bool DoesObjectExist(DoesObjectExistRequest request)
+        {
+            try {
+                CosResult result = Excute(request, new Model.Object.HeadObjectResult());
+                if (result.httpCode == 200) {
+                    return true;
+                }
+                return false;
+            }
+            catch (CosServerException serverEx) {
+                if (serverEx.statusCode == 404) {
+                    return false;
+                }
+                else {
+                    throw serverEx;
+                }
+            }
+            catch (Exception e) {
+                throw e;
+            }
+        }
+
+        public GetObjectResult GetObject(GetObjectRequest request)
+        {
+
+            return (Model.Object.GetObjectResult)Excute(request, new Model.Object.GetObjectResult());
+        }
+
+         
+        public void GetObject(GetObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetObjectResult(), successCallback, failCallback);
+        }
+
+        public PutObjectACLResult PutObjectACL(PutObjectACLRequest request)
+        {
+
+            return (Model.Object.PutObjectACLResult)Excute(request, new Model.Object.PutObjectACLResult());
+        }
+
+         
+        public void PutObjectACL(PutObjectACLRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutObjectACLResult(), successCallback, failCallback);
+        }
+
+        public GetObjectACLResult GetObjectACL(GetObjectACLRequest request)
+        {
+
+            return (Model.Object.GetObjectACLResult)Excute(request, new Model.Object.GetObjectACLResult());
+        }
+
+         
+        public void GetObjectACL(GetObjectACLRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetObjectACLResult(), successCallback, failCallback);
+        }
+
+        public PutObjectTaggingResult PutObjectTagging(PutObjectTaggingRequest request)
+        {
+            return (Model.Object.PutObjectTaggingResult)Excute(request, new Model.Object.PutObjectTaggingResult());
+        }
+
+        public void PutObjectTagging(PutObjectTaggingRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PutObjectTaggingResult(), successCallback, failCallback);
+        }
+
+        public GetObjectTaggingResult GetObjectTagging(GetObjectTaggingRequest request)
+        {
+            return (Model.Object.GetObjectTaggingResult)Excute(request, new Model.Object.GetObjectTaggingResult());
+        }
+
+        public void GetObjectTagging(GetObjectTaggingRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetObjectTaggingResult(), successCallback, failCallback);
+        }
+
+        public DeleteObjectTaggingResult DeleteObjectTagging(DeleteObjectTaggingRequest request)
+        {
+            return (Model.Object.DeleteObjectTaggingResult)Excute(request, new Model.Object.DeleteObjectTaggingResult());
+        }
+
+        public void DeleteObjectTagging(DeleteObjectTaggingRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteObjectTaggingResult(), successCallback, failCallback);
+        }
+
+        public DeleteObjectResult DeleteObject(DeleteObjectRequest request)
+        {
+
+            return (Model.Object.DeleteObjectResult)Excute(request, new Model.Object.DeleteObjectResult());
+        }
+
+         
+        public void DeleteObject(DeleteObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteObjectResult(), successCallback, failCallback);
+        }
+
+        public DeleteMultiObjectResult DeleteMultiObjects(DeleteMultiObjectRequest request)
+        {
+
+            return (Model.Object.DeleteMultiObjectResult)Excute(request, new Model.Object.DeleteMultiObjectResult());
+        }
+
+         
+        public void DeleteMultiObjects(DeleteMultiObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new DeleteMultiObjectResult(), successCallback, failCallback);
+        }
+
+        public InitMultipartUploadResult InitMultipartUpload(InitMultipartUploadRequest request)
+        {
+
+            return (Model.Object.InitMultipartUploadResult)Excute(request, new Model.Object.InitMultipartUploadResult());
+        }
+
+         
+        public void InitMultipartUpload(InitMultipartUploadRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new InitMultipartUploadResult(), successCallback, failCallback);
+        }
+
+        public ListPartsResult ListParts(ListPartsRequest request)
+        {
+
+            return (Model.Object.ListPartsResult)Excute(request, new Model.Object.ListPartsResult());
+        }
+
+         
+        public void ListParts(ListPartsRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new ListPartsResult(), successCallback, failCallback);
+        }
+
+        public UploadPartResult UploadPart(UploadPartRequest request)
+        {
+
+            return (Model.Object.UploadPartResult)Excute(request, new Model.Object.UploadPartResult());
+        }
+
+         
+        public void UploadPart(UploadPartRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new UploadPartResult(), successCallback, failCallback);
+        }
+
+        public CompleteMultipartUploadResult CompleteMultiUpload(CompleteMultipartUploadRequest request)
+        {
+
+            return (Model.Object.CompleteMultipartUploadResult)Excute(request, new Model.Object.CompleteMultipartUploadResult());
+        }
+
+         
+        public void CompleteMultiUpload(CompleteMultipartUploadRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new CompleteMultipartUploadResult(), successCallback, failCallback);
+        }
+
+        public AbortMultipartUploadResult AbortMultiUpload(AbortMultipartUploadRequest request)
+        {
+
+            return (Model.Object.AbortMultipartUploadResult)Excute(request, new Model.Object.AbortMultipartUploadResult());
+        }
+
+         
+        public void AbortMultiUpload(AbortMultipartUploadRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new AbortMultipartUploadResult(), successCallback, failCallback);
+        }
+
+        public CopyObjectResult CopyObject(CopyObjectRequest request)
+        {
+
+            return (Model.Object.CopyObjectResult)Excute(request, new Model.Object.CopyObjectResult());
+        }
+
+         
+        public void CopyObject(CopyObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new CopyObjectResult(), successCallback, failCallback);
+        }
+
+        public UploadPartCopyResult PartCopy(UploadPartCopyRequest request)
+        {
+
+            return (Model.Object.UploadPartCopyResult)Excute(request, new Model.Object.UploadPartCopyResult());
+        }
+
+         
+        public void PartCopy(UploadPartCopyRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new UploadPartCopyResult(), successCallback, failCallback);
+        }
+
+        public OptionObjectResult OptionObject(OptionObjectRequest request)
+        {
+
+            return (Model.Object.OptionObjectResult)Excute(request, new Model.Object.OptionObjectResult());
+        }
+
+         
+        public void OptionObject(OptionObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new OptionObjectResult(), successCallback, failCallback);
+        }
+
+        public PostObjectResult PostObject(PostObjectRequest request)
+        {
+
+            return (Model.Object.PostObjectResult)Excute(request, new Model.Object.PostObjectResult());
+        }
+
+         
+        public void PostObject(PostObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new PostObjectResult(), successCallback, failCallback);
+        }
+
+        public RestoreObjectResult RestoreObject(RestoreObjectRequest request)
+        {
+
+            return (Model.Object.RestoreObjectResult)Excute(request, new Model.Object.RestoreObjectResult());
+        }
+
+         
+        public void RestoreObject(RestoreObjectRequest request, Callback.OnSuccessCallback<CosResult> successCallback, Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new RestoreObjectResult(), successCallback, failCallback);
+        }
+
+        public string GenerateSign(string method, string key, Dictionary<string, string> queryParameters, 
+                                   Dictionary<string, string> headers, long signDurationSecond, long keyDurationSecond)
+        {
+
+            try
+            {
+                string signTime = null;
+                long currentTimeSecond = TimeUtils_QCloud.GetCurrentTime(TimeUnit.Seconds);
+
+                if (signDurationSecond > 0)
+                {
+                    signTime = String.Format("{0};{1}", currentTimeSecond, currentTimeSecond + signDurationSecond);
+                }
+
+                string keyTime = null;
+                if (keyDurationSecond > 0)
+                {
+                    signTime = String.Format("{0};{1}", currentTimeSecond, currentTimeSecond + keyDurationSecond);
+                }
+
+                Dictionary<string, string> encodeQuery = null;
+
+                if (queryParameters != null)
+                {
+                    encodeQuery = new Dictionary<string, string>(queryParameters.Count);
+
+                    foreach (KeyValuePair<string, string> keyValuePair in queryParameters)
+                    {
+                        if (keyValuePair.Key == null || keyValuePair.Key == "")
+                        {
+                            continue;
+                        }
+                        else if (keyValuePair.Value == null)
+                        {
+                            encodeQuery[URLEncodeUtils.Encode(keyValuePair.Key).ToLower()] = URLEncodeUtils.Encode("");
+                        }
+                        else 
+                        {
+                            encodeQuery[URLEncodeUtils.Encode(keyValuePair.Key).ToLower()] = URLEncodeUtils.Encode(keyValuePair.Value);
+                        } 
+                    }
+                }
+
+                return CosXmlSigner.GenerateSign(method, key, encodeQuery, headers, signTime, keyTime, credentialProvider.GetQCloudCredentialsCompat(null));
+            }
+            catch (CosClientException)
+            {
+                throw;
+            }
+            catch (Exception ex)
+            {
+                throw new CosClientException((int)CosClientError.InvalidArgument, ex.Message, ex);
+            }
+        }
+
+        public string GenerateSignURL(PreSignatureStruct preSignatureStruct)
+        {
+
+            try
+            {
+
+                if (preSignatureStruct.httpMethod == null)
+                {
+                    throw new CosClientException((int)CosClientError.InvalidArgument, "httpMethod = null");
+                }
+
+                if (preSignatureStruct.key == null)
+                {
+                    throw new CosClientException((int)CosClientError.InvalidArgument, "key = null");
+                }
+
+                StringBuilder urlBuilder = new StringBuilder();
+
+                if (preSignatureStruct.isHttps)
+                {
+                    urlBuilder.Append("https://");
+                }
+                else
+                {
+                    urlBuilder.Append("http://");
+                }
+
+                if (preSignatureStruct.host == null)
+                {
+                    StringBuilder host = new StringBuilder();
+
+                    if (preSignatureStruct.bucket == null)
+                    {
+                        throw new CosClientException((int)CosClientError.InvalidArgument, "bucket = null");
+                    }
+
+                    if (preSignatureStruct.bucket.EndsWith("-" + preSignatureStruct.appid))
+                    {
+                        host.Append(preSignatureStruct.bucket);
+                    }
+                    else
+                    {
+                        host.Append(preSignatureStruct.bucket).Append("-")
+                            .Append(preSignatureStruct.appid);
+                    }
+
+                    host.Append(".cos.")
+                        .Append(preSignatureStruct.region)
+                        .Append(".myqcloud.com");
+
+                    urlBuilder.Append(host.ToString());
+
+                    // host 入签
+                    if (preSignatureStruct.signHost)
+                    {
+                        if (preSignatureStruct.headers == null)
+                        {
+                            preSignatureStruct.headers = new Dictionary<string, string>(); 
+                        }
+                        if (!preSignatureStruct.headers.ContainsKey("host"))
+                            preSignatureStruct.headers.Add("host", host.ToString());
+                    }
+                }
+                else
+                {
+                    urlBuilder.Append(preSignatureStruct.host);
+                    // host 入签
+                    if (preSignatureStruct.signHost) {
+                        if (preSignatureStruct.headers == null)
+                        {
+                            preSignatureStruct.headers = new Dictionary<string, string>(); 
+                        }
+                        preSignatureStruct.headers.Add("host", preSignatureStruct.host);
+                    }
+                }
+
+                if (!preSignatureStruct.key.StartsWith("/"))
+                {
+                    preSignatureStruct.key = "/" + preSignatureStruct.key;
+                }
+
+                urlBuilder.Append(preSignatureStruct.key.Replace("+", "%2B"));
+
+                string sign = GenerateSign(preSignatureStruct.httpMethod, preSignatureStruct.key,
+                    preSignatureStruct.queryParameters, preSignatureStruct.headers, 
+                    preSignatureStruct.signDurationSecond, preSignatureStruct.keyDurationSecond);
+
+                StringBuilder queryBuilder = new StringBuilder();
+
+                if (preSignatureStruct.queryParameters != null && preSignatureStruct.queryParameters.Count > 0)
+                {
+                    foreach (KeyValuePair<string, string> keyValuePair in preSignatureStruct.queryParameters)
+                    {
+                        if (keyValuePair.Key == null || keyValuePair.Key == "")
+                            continue;
+                        queryBuilder.Append(URLEncodeUtils.Encode(keyValuePair.Key)).Append('=').Append(URLEncodeUtils.Encode(keyValuePair.Value));
+                        queryBuilder.Append('&');
+                    }
+                }
+                
+                // 针对需要二次 Encode 的 request Param 特殊处理
+                Regex rgx = new Regex("q-url-param-list=.*&q-signature");
+                string paramlist = rgx.Match(sign).ToString().Split('=')[1].ToString().Split('&')[0].ToString();
+                paramlist = paramlist.Trim('&');
+                paramlist = URLEncodeUtils.Encode(paramlist).ToLower();
+                string encodedStr = "q-url-param-list=" + paramlist + "&q-signature";
+                sign = rgx.Replace(sign, encodedStr);
+
+                queryBuilder.Append(sign);
+                urlBuilder.Append("?").Append(queryBuilder.ToString());
+
+                return urlBuilder.ToString();
+            }
+            catch (CosClientException)
+            {
+                throw;
+            }
+            catch (Exception ex)
+            {
+                throw new CosClientException((int)CosClientError.InvalidArgument, ex.Message, ex);
+            }
+        }
+
+        public void Cancel(CosRequest cosRequest)
+        {
+
+            if (cosRequest != null)
+            {
+                cosRequest.Cancel();
+            }
+        }
+
+        public GetObjectBytesResult GetObject(GetObjectBytesRequest request)
+        {
+
+            return (Model.Object.GetObjectBytesResult)Excute(request, new Model.Object.GetObjectBytesResult());
+        }
+
+        public void GetObject(GetObjectBytesRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new GetObjectBytesResult(), successCallback, failCallback);
+        }
+
+        public string GetObjectUrl(string bucket, string key) 
+        {
+            string http_prefix = config.IsHttps ? "https://" : "http://";
+            StringBuilder domainSuffix = new StringBuilder();
+            // 优先自定义域名
+            if (this.config.host != null) {
+                domainSuffix.Append(this.config.host).Append("/").Append(key);
+                return http_prefix + domainSuffix.ToString();
+            }
+            // endpoint
+            else if (this.config.endpointSuffix != null) {
+                domainSuffix.Append(".").Append(this.config.endpointSuffix).Append("/").Append(key);
+            }
+            // 默认域名
+            else {
+                domainSuffix.Append(".cos.");
+                domainSuffix.Append(this.config.Region).Append(".myqcloud.com/").Append(key);
+            }
+            return http_prefix + bucket + domainSuffix.ToString();
+        }
+
+        public PutBucketWebsiteResult PutBucketWebsite(PutBucketWebsiteRequest request)
+        {
+
+            return (Model.Bucket.PutBucketWebsiteResult)Excute(request, new Model.Bucket.PutBucketWebsiteResult());
+        }
+
+         
+        public void PutBucketWebsiteAsync(PutBucketWebsiteRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.PutBucketWebsiteResult(), successCallback, failCallback);
+        }
+
+        public GetBucketWebsiteResult GetBucketWebsite(GetBucketWebsiteRequest request)
+        {
+
+            return (Model.Bucket.GetBucketWebsiteResult)Excute(request, new Model.Bucket.GetBucketWebsiteResult());
+        }
+
+         
+        public void GetBucketWebsiteAsync(GetBucketWebsiteRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.GetBucketWebsiteResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketWebsiteResult DeleteBucketWebsite(DeleteBucketWebsiteRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketWebsiteResult)Excute(request, new Model.Bucket.DeleteBucketWebsiteResult());
+        }
+
+         
+        public void DeleteBucketWebsiteAsync(DeleteBucketWebsiteRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.DeleteBucketWebsiteResult(), successCallback, failCallback);
+        }
+
+        public PutBucketLoggingResult PutBucketLogging(PutBucketLoggingRequest request)
+        {
+
+            return (Model.Bucket.PutBucketLoggingResult)Excute(request, new Model.Bucket.PutBucketLoggingResult());
+        }
+
+         
+        public void PutBucketLoggingAsync(PutBucketLoggingRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.PutBucketLoggingResult(), successCallback, failCallback);
+        }
+
+        public GetBucketLoggingResult GetBucketLogging(GetBucketLoggingRequest request)
+        {
+
+            return (Model.Bucket.GetBucketLoggingResult)Excute(request, new Model.Bucket.GetBucketLoggingResult());
+        }
+
+         
+        public void GetBucketLoggingAsync(GetBucketLoggingRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.GetBucketLoggingResult(), successCallback, failCallback);
+        }
+
+        public PutBucketInventoryResult PutBucketInventory(PutBucketInventoryRequest request)
+        {
+
+            return (Model.Bucket.PutBucketInventoryResult)Excute(request, new Model.Bucket.PutBucketInventoryResult());
+        }
+
+         
+        public void PutBucketInventoryAsync(PutBucketInventoryRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.PutBucketInventoryResult(), successCallback, failCallback);
+        }
+
+        public GetBucketInventoryResult GetBucketInventory(GetBucketInventoryRequest request)
+        {
+
+            return (Model.Bucket.GetBucketInventoryResult)Excute(request, new Model.Bucket.GetBucketInventoryResult());
+        }
+
+         
+        public void GetBucketInventoryAsync(GetBucketInventoryRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.GetBucketInventoryResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketInventoryResult DeleteBucketInventory(DeleteBucketInventoryRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketInventoryResult)Excute(request, new Model.Bucket.DeleteBucketInventoryResult());
+        }
+
+         
+        public void DeleteInventoryAsync(DeleteBucketInventoryRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.DeleteBucketInventoryResult(), successCallback, failCallback);
+        }
+
+        public ListBucketInventoryResult ListBucketInventory(ListBucketInventoryRequest request)
+        {
+
+            return (Model.Bucket.ListBucketInventoryResult)Excute(request, new Model.Bucket.ListBucketInventoryResult());
+        }
+
+         
+        public void ListBucketInventoryAsync(ListBucketInventoryRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.ListBucketInventoryResult(), successCallback, failCallback);
+        }
+
+        public PutBucketTaggingResult PutBucketTagging(PutBucketTaggingRequest request)
+        {
+
+            return (Model.Bucket.PutBucketTaggingResult)Excute(request, new Model.Bucket.PutBucketTaggingResult());
+        }
+
+         
+        public void PutBucketTaggingAsync(PutBucketTaggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.PutBucketTaggingResult(), successCallback, failCallback);
+        }
+
+        public GetBucketTaggingResult GetBucketTagging(GetBucketTaggingRequest request)
+        {
+
+            return (Model.Bucket.GetBucketTaggingResult)Excute(request, new Model.Bucket.GetBucketTaggingResult());
+        }
+
+         
+        public void GetBucketTaggingAsync(GetBucketTaggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.GetBucketTaggingResult(), successCallback, failCallback);
+        }
+
+        public DeleteBucketTaggingResult DeleteBucketTagging(DeleteBucketTaggingRequest request)
+        {
+
+            return (Model.Bucket.DeleteBucketTaggingResult)Excute(request, new Model.Bucket.DeleteBucketTaggingResult());
+        }
+
+         
+        public void DeleteBucketTaggingAsync(DeleteBucketTaggingRequest request, COSXML.Callback.OnSuccessCallback<CosResult> successCallback, COSXML.Callback.OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.DeleteBucketTaggingResult(), successCallback, failCallback);
+        }
+
+        public PutBucketDomainResult PutBucketDomain(PutBucketDomainRequest request)
+        {
+
+            return (Model.Bucket.PutBucketDomainResult)Excute(request, new Model.Bucket.PutBucketDomainResult());
+        }
+
+         
+        public void PutBucketDomainAsync(PutBucketDomainRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.PutBucketDomainResult(), successCallback, failCallback);
+        }
+
+        public GetBucketDomainResult GetBucketDomain(GetBucketDomainRequest request)
+        {
+
+            return (Model.Bucket.GetBucketDomainResult)Excute(request, new Model.Bucket.GetBucketDomainResult());
+        }
+
+         
+        public void GetBucketDomainAsync(GetBucketDomainRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Bucket.GetBucketDomainResult(), successCallback, failCallback);
+        }
+
+        SelectObjectResult CosXml.SelectObject(SelectObjectRequest request)
+        {
+
+            return (Model.Object.SelectObjectResult)Excute(request, new Model.Object.SelectObjectResult());
+        }
+
+         
+        void CosXml.SelectObjectAsync(SelectObjectRequest request, OnSuccessCallback<CosResult> successCallback, OnFailedCallback failCallback)
+        {
+            Schedue(request, new Model.Object.SelectObjectResult(), successCallback, failCallback);
+        }
+
+        public GetBucketIntelligentTieringResult GetBucketIntelligentTieringConfiguration(GetBucketIntelligentTieringRequest request)
+        {
+
+            try
+            {
+
+                return Execute(request, new GetBucketIntelligentTieringResult());
+            }
+            catch (CosServerException e)
+            {
+
+                if (e.statusCode == 404)
+                {
+
+                    return new GetBucketIntelligentTieringResult();
+                }
+
+                throw e;
+            }
+        }
+
+        public CosResult PutBucketIntelligentTiering(PutBucketIntelligentTieringRequest request)
+        {
+
+            return Execute(request, new CosResult());
+        }
+
+        public SensitiveContentRecognitionResult SensitiveContentRecognition(SensitiveContentRecognitionRequest request)
+        {
+
+            return Execute(request, new SensitiveContentRecognitionResult());
+        }
+
+        /// <summary>
+        /// 图片处理
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public ImageProcessResult ImageProcess(ImageProcessRequest request)
+        {
+
+            return Execute(request, new ImageProcessResult());
+        }
+
+        /// <summary>
+        /// 下载时进行二维码识别
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public QRCodeRecognitionResult QRCodeRecognition(QRCodeRecognitionRequest request)
+        {
+            return Execute(request, new QRCodeRecognitionResult());
+        }
+
+        /// <summary>
+        /// 获取媒体文件某个时间的截图
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public GetSnapshotResult GetSnapshot(GetSnapshotRequest request)
+        {
+            return Execute(request, new GetSnapshotResult());
+        }
+
+        /// <summary>
+        /// 获取媒体文件的信息
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public GetMediaInfoResult GetMediaInfo(GetMediaInfoRequest request)
+        {
+            return Execute(request, new GetMediaInfoResult());
+        }
+
+        /// <summary>
+        /// 提交视频审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public SubmitCensorJobResult SubmitVideoCensorJob(SubmitVideoCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new SubmitCensorJobResult());
+        }
+
+        /// <summary>
+        /// 获取视频审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public GetVideoCensorJobResult GetVideoCensorJob(GetVideoCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new GetVideoCensorJobResult());
+        }
+
+        /// <summary>
+        /// 提交音频审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public SubmitCensorJobResult SubmitAudioCensorJob(SubmitAudioCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new SubmitCensorJobResult());
+        }
+
+        /// <summary>
+        /// 获取音频审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public GetAudioCensorJobResult GetAudioCensorJob(GetAudioCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new GetAudioCensorJobResult());
+        }
+
+        /// <summary>
+        /// 提交文本审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public SubmitCensorJobResult SubmitTextCensorJob(SubmitTextCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new SubmitCensorJobResult());
+        }
+
+        /// <summary>
+        /// 提交文本审核任务, 支持同步返回
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public SubmitTextCensorJobsResult SubmitTextCensorJobSync(SubmitTextCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new SubmitTextCensorJobsResult());
+        }
+
+        /// <summary>
+        /// 获取文本审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public GetTextCensorJobResult GetTextCensorJob(GetTextCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new GetTextCensorJobResult());
+        }
+
+        /// <summary>
+        /// 提交文档审核任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public SubmitCensorJobResult SubmitDocumentCensorJob(SubmitDocumentCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new SubmitCensorJobResult());
+        }
+        
+        /// <summary>
+        /// 获取文档审核任务结果
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public GetDocumentCensorJobResult GetDocumentCensorJob(GetDocumentCensorJobRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new GetDocumentCensorJobResult());
+        }
+
+        /// <summary>
+        /// 获取媒体bucket列表
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public DescribeMediaBucketsResult DescribeMediaBuckets(DescribeMediaBucketsRequest request)
+        {
+            request.Region = this.GetConfig().Region;
+            return Execute(request, new DescribeMediaBucketsResult());
+        }
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/CosXmlServer.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d16d42c0ad3ef644aa894d67e3761257
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Listener.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b7c3ced3e211c2147b82cafe5a05af41
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 51 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Listener/CosCallback.cs

@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using COSXML.Model;
+using COSXML.CosException;
+using System.IO;
+
+namespace COSXML.Callback
+{
+    /// <summary>
+    /// 上传、下载进度回调
+    /// </summary>
+    /// <param name="completed"></param>
+    /// <param name="total"></param>
+    public delegate void OnProgressCallback(long completed, long total);
+
+    /// <summary>
+    /// 获取结果的回调
+    /// </summary>
+    public delegate void OnNotifyGetResponse();
+
+    /// <summary>
+    /// 请求成功回调
+    /// </summary>
+    /// <typeparam name="T1"></typeparam>
+    /// <typeparam name="T2"></typeparam>
+    /// <param name="cosRequest"></param>
+    /// <param name="cosResult"></param>
+    public delegate void OnSuccessCallback<T>(T cosResult)
+        where T : CosResult;
+
+    /// <summary>
+    /// 请求失败回调
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="cosRequest"></param>
+    /// <param name="clientException"></param>
+    /// <param name="serverException"></param>
+    public delegate void OnFailedCallback(CosClientException clientException, CosServerException serverException);
+
+    /// <summary>
+    /// 解析流回调
+    /// </summary>
+    /// <param name="inputStream"></param>
+    /// <param name="contentType"></param>
+    /// <param name="contentLength"></param>
+    /// <exception cref="CosServerException">throw CosServerException</exception>
+    /// <exception cref="CosClientException">throw CosClientException</exception>
+    /// <exception cref="Exception"> throw Excetpion</exception>
+    public delegate void OnParseStream(Stream inputStream, string contentType, long contentLength);
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Listener/CosCallback.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5bda74417467e08409e06ccdc7b555dd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 75ef2ed003e8e1046a31195e8df1796c
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 218 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/FileLogImpl.cs

@@ -0,0 +1,218 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Text;
+//using System.Diagnostics;
+//using System.Collections;
+//using System.IO;
+//using COSXML.Utils;
+//using System.Threading;
+
+//namespace COSXML.Log
+//{
+//    /// <summary>
+//    /// 异步写入本地文件日志
+//    /// 日志路径:当前应用工程的Log文件夹下
+//    /// 后台写入:开启一个后台线程 logThread
+//    /// 缓存区域:开辟一块临时日志缓存区域 logBuffer
+//    /// 消息循环机制:循环获取->写入 handle -> looper
+//    /// </summary>
+//    public sealed class FileLogImpl : Log
+//    {
+//        private string logDir;
+//        private const int LOG_BUFFER_SIZE = 32 * 1024; //32kb
+//        private const int LOG_FILE_MAX_COUNTS = 30; // 30个文件数 
+//        private const int LOG_FILE_MAX_LENGTH = 3 * 1048576; // 文件最大为3M
+//        private Queue<string> logFiles;
+//        private List<string> buffer;
+//        private int currentBufferSize;
+
+//        private Handler handler;
+//        public const byte MESSAGE_COMNE_IN = 0;
+//        public const byte MESSAGE_FLUSH = 1;
+
+//        public FileLogImpl(string logDir)
+//        {
+//            if (String.IsNullOrEmpty(logDir))
+//            {
+//                Trace.WriteLine("log dir = null");
+//            }
+//            else
+//            {
+//                this.logDir = logDir;
+//                DirectoryInfo dirInfo = new DirectoryInfo(logDir);
+//                if (!dirInfo.Exists) dirInfo.Create();
+//                logFiles = new Queue<string>(30);
+//                buffer = new List<string>(10);
+//                currentBufferSize = 0;
+//                handler = new Handler();
+//                handler.OnHandleMessage = OnHandleMessage;
+//                Thread logThread = new Thread(handler.InternalHandle) { Name = "LogThread", IsBackground = true};
+//                logThread.Start();
+//            }
+//        }
+
+//        private void OnHandleMessage(Message message)
+//        {
+//            Trace.WriteLine(String.Format("currentThread :name = {0} id = {1} isBackground = {2}", Thread.CurrentThread.Name, Thread.CurrentThread.ManagedThreadId,
+//                Thread.CurrentThread.IsBackground));
+//            switch (message.what)
+//            {
+//                case MESSAGE_COMNE_IN:
+//                    WriteLogToBuffer((string)message.obj);
+//                    break;
+//                case MESSAGE_FLUSH:
+//                    WriteLogToFile();
+//                    break;
+//            }
+//        }
+
+//        public void PrintLog(string logMessage)
+//        {
+//            if (handler == null) return;
+//            Message message = new Message();
+//            message.what = MESSAGE_COMNE_IN;
+//            message.obj = logMessage;
+//            handler.SendMessage(message);
+//        }
+
+
+
+//        private void WriteLogToBuffer(string message)
+//        {
+//            if (message != null)
+//            {
+//                buffer.Add(message);
+//                currentBufferSize += message.Length;
+//                if (currentBufferSize > LOG_BUFFER_SIZE)
+//                {
+//                    handler.SendMessage(MESSAGE_FLUSH);
+//                }
+//            }
+//        }
+
+
+
+//        private string GetCurrentLogFilePath()
+//        {
+//            if (logFiles.Count == 0)
+//            {
+//                DirectoryInfo dirInfo = new DirectoryInfo(logDir);
+//                FileInfo[] fileInfos = dirInfo.GetFiles();
+//                Array.Sort(fileInfos, delegate(FileInfo f1, FileInfo f2)
+//                {
+//                    long prefix1 = 0, prefix2 = 0;
+//                    long.TryParse(f1.Name.Split('.')[0], out prefix1);
+//                    long.TryParse(f2.Name.Split('.')[0], out prefix2);
+//                    if (prefix1 > prefix2) return 1;
+//                    if (prefix1 == prefix2) return 0;
+//                    if (prefix1 < prefix2) return -1;
+//                    return 0;
+//                });
+//                foreach (FileInfo fileInfo in fileInfos)
+//                {
+//                    logFiles.Enqueue(fileInfo.FullName);
+//                }
+//            }
+//            int count = logFiles.Count - LOG_FILE_MAX_COUNTS;
+//            for (int i = 0; i < count; i++)
+//            {
+//                logFiles.Dequeue();
+//            }
+//            if (logFiles.Count > 0)
+//            {
+//                FileInfo lastFileInfo = new FileInfo(logFiles.ToArray()[logFiles.Count - 1]);
+//                if (lastFileInfo.Length < LOG_FILE_MAX_LENGTH)
+//                {
+//                    return lastFileInfo.FullName;
+//                }
+//            }
+//            string logFileName = String.Format("{0}.log", TimeUtils.GetCurrentTime(TimeUnit.SECONDS));
+//            string logFilePath = logDir + System.IO.Path.DirectorySeparatorChar + logFileName;
+//            logFiles.Enqueue(logFilePath);
+//            return logFilePath;
+//        }
+
+//        private void WriteLogToFile()
+//        {
+//            FileStream fileStream = null;
+//            StreamWriter streamWriter = null;
+//            try
+//            {
+//                string logFile = GetCurrentLogFilePath();
+//                fileStream = new FileStream(logFile, FileMode.Append, FileAccess.Write);
+//                streamWriter = new StreamWriter(fileStream);
+//                foreach (string content in buffer)
+//                {
+//                    streamWriter.Write(content);
+//                }
+//                streamWriter.Flush();
+//                buffer.Clear();
+//                currentBufferSize = 0;
+//            }
+//            catch (Exception)
+//            {
+//                //Trace.WriteLine(ex.StackTrace);
+//            }
+//            finally
+//            {
+//                if (streamWriter != null) streamWriter.Close();
+//                //if (fileStream != null)
+//                //{
+//                //    fileStream.Close();
+//                //}
+//            }
+//        }
+//    }
+
+//    public class Handler
+//    {
+//        private Queue<Message> messageQueue = new Queue<Message>(20);
+
+//        public void SendMessage(Message message)
+//        {
+//            messageQueue.Enqueue(message);
+
+//        }
+
+//        public void SendMessage(int what)
+//        {
+//            Message message = new Message();
+//            message.what = what;
+//            messageQueue.Enqueue(message);
+//        }
+
+//        public HandleMessage OnHandleMessage;
+
+//        public void InternalHandle()
+//        {
+//            long start = TimeUtils.GetCurrentTime(TimeUnit.SECONDS);
+//            while (true)
+//            {
+//                try
+//                {
+//                    Message message = messageQueue.Dequeue();
+//                    OnHandleMessage(message);
+//                }
+//                catch (Exception)
+//                {
+//                    //Trace.WriteLine(ex.StackTrace);
+//                }
+//                long end = TimeUtils.GetCurrentTime(TimeUnit.SECONDS);
+//                if (end - start > 10)
+//                {
+//                    start = end;
+//                    SendMessage(FileLogImpl.MESSAGE_FLUSH);
+//                }
+//            }
+//        }
+
+//    }
+
+//    public delegate void HandleMessage(Message message);
+
+//    public class Message
+//    {
+//        public int what;
+//        public Object obj;
+//    }
+//}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/FileLogImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8a65f82f683f3c949a17d3e0742d63ce
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 12 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/ILog.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+
+namespace COSXML.Log
+{
+    public interface ILog
+    {
+        void PrintLog(string message);
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/ILog.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 357ba817bc609b5428a767d69e2f6d4b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 17 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/LogImpl.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using System.Diagnostics;
+
+namespace COSXML.Log
+{
+    public sealed class LogImpl : ILog
+    {
+
+        public void PrintLog(string message)
+        {
+            Trace.WriteLine(message);
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/LogImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4e9fc0ab9788875478250081e7d6f56c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 177 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/QLog.cs

@@ -0,0 +1,177 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using System.IO;
+using System.Threading;
+using System.Diagnostics;
+
+namespace COSXML.Log
+{
+    public sealed class QLog
+    {
+        private static string timeFormat = "yyyy-MM-dd HH:mm:ss.fff";
+
+        //private static string currentDir = Directory.GetCurrentDirectory();
+
+        private static Process currentProcess = Process.GetCurrentProcess();
+
+        private static List<ILog> logImplList = new List<ILog>();
+
+        private static Level level = Level.V;
+
+        public static void SetLogLevel(Level level)
+        {
+            QLog.level = level;
+        }
+
+        public static void AddLogAdapter(ILog log)
+        {
+
+            if (log == null)
+            {
+
+                return;
+            }
+
+            foreach (ILog logImpl in logImplList)
+            {
+
+                if (logImpl.GetType().Name == log.GetType().Name)
+                {
+
+                    return;
+                }
+            }
+
+            logImplList.Add(log);
+        }
+
+        public static void Verbose(string tag, string message)
+        {
+            Verbose(tag, message, null);
+        }
+
+        public static void Verbose(string tag, string message, Exception exception)
+        {
+
+            if (Level.V >= QLog.level)
+            {
+                Print(Level.V, tag, message, exception);
+            }
+
+        }
+
+        public static void Debug(string tag, string message)
+        {
+            Debug(tag, message, null);
+        }
+
+        public static void Debug(string tag, string message, Exception exception)
+        {
+
+            if (Level.D >= QLog.level)
+            {
+                Print(Level.D, tag, message, exception);
+            }
+
+        }
+
+        public static void Info(string tag, string message)
+        {
+            Info(tag, message, null);
+        }
+
+        public static void Info(string tag, string message, Exception exception)
+        {
+
+            if (Level.I >= QLog.level)
+            {
+                Print(Level.I, tag, message, exception);
+            }
+
+        }
+
+        public static void Warn(string tag, string message)
+        {
+            Warn(tag, message, null);
+        }
+
+        public static void Warn(string tag, string message, Exception exception)
+        {
+
+            if (Level.W >= QLog.level)
+            {
+                Print(Level.W, tag, message, exception);
+            }
+
+        }
+
+        public static void Error(string tag, string message)
+        {
+            Error(tag, message, null);
+        }
+
+        public static void Error(string tag, string message, Exception exception)
+        {
+
+            if (Level.E >= QLog.level)
+            {
+                Print(Level.E, tag, message, exception);
+            }
+
+        }
+
+        private static void Print(Level level, string tag, string message, Exception exception)
+        {
+            StringBuilder messageBuilder = new StringBuilder();
+
+
+            messageBuilder.Append(DateTime.Now.ToString(timeFormat))
+                .Append(" ")
+                .Append(Thread.CurrentThread.ManagedThreadId)
+                .Append("-")
+                .Append(currentProcess.Id)
+                // OSX 系统上不支持
+                // .Append("/")
+                // .Append(currentProcess.ProcessName)
+                .Append(" ")
+                .Append(level.ToString())
+                .Append("/")
+                .Append(tag)
+                .Append(": ")
+                .Append(message);
+
+            if (exception != null)
+            {
+                messageBuilder.Append("\n Exception:\n")
+                    .Append(exception.ToString());
+            }
+
+            messageBuilder.Append("\r\n");
+
+            foreach (ILog log in logImplList)
+            {
+                log.PrintLog(messageBuilder.ToString());
+            }
+        }
+
+        //private static string PrintExceptionTrace(Exception exception)
+        //{
+        //    return exception.ToString();
+        //}
+    }
+
+    public enum Level
+    {
+        V = 0,
+
+        D,
+
+        I,
+
+        W,
+
+        E
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Log/QLog.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 69a40670829b64c46904174bd983e539
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a6fc8a0b5f6d5434c86f44aa01c1fa3a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dd0a950b77eaf594aa26cc0cd5a03f3a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 116 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/BucketRequest.cs

@@ -0,0 +1,116 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.CosException;
+using COSXML.Common;
+
+namespace COSXML.Model.Bucket
+{
+
+    public abstract class BucketRequest : CosRequest
+    {
+        /// <summary>
+        /// cos 存储桶,即 Bucket
+        /// </summary>
+        protected string bucket;
+
+        /// <summary>
+        /// Bucket 所在的地域
+        /// </summary>
+        protected string region;
+
+        public BucketRequest(string bucket)
+        {
+            this.bucket = bucket;
+            this.path = "/";
+        }
+
+        /// <summary>
+        /// Bucket 名称, "BucketName-APPID"
+        /// </summary>
+        public string Bucket
+        {
+            get
+            {
+                return this.bucket;
+            }
+            set { this.bucket = value; }
+        }
+
+        public string Region
+        {
+            get
+            {
+                return this.region;
+            }
+            set { this.region = value; }
+        }
+
+        public override Network.RequestBody GetRequestBody()
+        {
+
+            return null;
+        }
+
+        public override string GetHost()
+        {
+            StringBuilder hostBuilder = new StringBuilder();
+
+            if (!String.IsNullOrEmpty(serviceConfig.host))
+            {
+                hostBuilder.Append(serviceConfig.host);
+            }
+
+            else
+            {
+                hostBuilder.Append(bucket);
+
+                if (!String.IsNullOrEmpty(appid) && !bucket.EndsWith("-" + appid))
+                {
+                    hostBuilder.Append("-")
+                        .Append(appid);
+                }
+
+                if (serviceConfig.endpointSuffix != null)
+                {
+                    hostBuilder.Append(".")
+                        .Append(serviceConfig.endpointSuffix);
+                }
+
+                else
+                {
+                    hostBuilder.Append(".cos.")
+                        .Append(region)
+                        .Append(".myqcloud.com");
+                }
+            }
+
+            return hostBuilder.ToString();
+        }
+
+        public override void CheckParameters()
+        {
+
+            if (requestUrlWithSign != null)
+            {
+
+                return;
+            }
+
+            //if (appid == null)
+            //{
+            //    throw new CosClientException((int)CosClientError.INVALID_ARGUMENT, "appid is null");
+            //}
+            if (bucket == null)
+            {
+                throw new CosClientException((int)CosClientError.InvalidArgument, "bucket is null");
+            }
+            // if (region == null)
+            // {
+            //     throw new CosClientException((int)CosClientError.INVALID_ARGUMENT, "region is null");
+            // }
+        }
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/BucketRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1d9473408311307408ded062bdddb1cf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 21 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSRequest.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+
+namespace COSXML.Model.Bucket
+{
+    /// <summary>
+    /// 删除 Bucket CORS
+    /// <see href="https://cloud.tencent.com/document/product/436/8283"/>
+    /// </summary>
+    public sealed class DeleteBucketCORSRequest : BucketRequest
+    {
+        public DeleteBucketCORSRequest(string bucket) : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+            this.queryParameters.Add("cors", null);
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8899cc0ecea8b274da9a9faa18bee529
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 15 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSResult.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    /// <summary>
+    /// 删除 Bucket CORS 返回的结果
+    /// <see href="https://cloud.tencent.com/document/product/436/8283"/>
+    /// </summary>
+    public sealed class DeleteBucketCORSResult : CosResult
+    {
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketCORSResult.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bc1e93dc9d124f2428393833b1e61a43
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 27 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryRequest.cs

@@ -0,0 +1,27 @@
+using COSXML.Common;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketInventoryRequest : BucketRequest
+    {
+        public DeleteBucketInventoryRequest(string bucket) : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+            this.queryParameters.Add("inventory", null);
+        }
+
+        public void SetInventoryId(string inventoryId)
+        {
+
+            if (inventoryId != null)
+            {
+                SetQueryParameter("id", inventoryId);
+            }
+        }
+
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1b844912ffbe31244a24d08a8cda10ef
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryResult.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketInventoryResult : CosResult
+    {
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketInventoryResult.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6c582bace4bb5ce41a43677f5cdeca82
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 22 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleRequest.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+
+namespace COSXML.Model.Bucket
+{
+    /// <summary>
+    /// 删除 Bucket Lifecycle
+    /// <see href="https://cloud.tencent.com/document/product/436/8284"/>
+    /// </summary>
+    public sealed class DeleteBucketLifecycleRequest : BucketRequest
+    {
+        public DeleteBucketLifecycleRequest(string bucket)
+            : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+            this.queryParameters.Add("lifecycle", null);
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4325fcccc34b991428c6ecfb5f0826f5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 15 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleResult.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    /// <summary>
+    /// 删除 Bucket Lifecycle 返回的结果
+    /// <see href="https://cloud.tencent.com/document/product/436/8284"/>
+    /// </summary>
+    public sealed class DeleteBucketLifecycleResult : CosResult
+    {
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketLifecycleResult.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 40dc0c78f9c96d345aa9d1280dbe68bd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 21 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyRequest.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using COSXML.Common;
+
+namespace COSXML.Model.Bucket
+{
+    /// <summary>
+    /// 删除 Bucket 权限策略
+    /// <see href="https://cloud.tencent.com/document/product/436/8285"/>
+    /// </summary>
+    public sealed class DeleteBucketPolicyRequest : BucketRequest
+    {
+        public DeleteBucketPolicyRequest(string bucket)
+            : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+            this.queryParameters.Add("policy", null);
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 39eebc29e24be6a4187dd4be3a0c49f3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 14 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyResult.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    /// <summary>
+    /// 删除 Bucket 权限策略返回的结果
+    /// <see href="https://cloud.tencent.com/document/product/436/8285"/>
+    /// </summary>
+    public sealed class DeleteBucketPolicyResult : CosResult
+    {
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketPolicyResult.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 493c5b86be4f76743b9f3a4f8922359e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 18 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationRequest.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketReplicationRequest : BucketRequest
+    {
+        public DeleteBucketReplicationRequest(string bucket)
+            : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+            this.queryParameters.Add("replication", null);
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cbf60e4c03a7cda4c9ddf1faf42dd47c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationResult.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketReplicationResult : CosResult
+    {
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketReplicationResult.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7b56d929d397da546bc3b17bae364fcf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 21 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketRequest.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+using COSXML.Common;
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketRequest : BucketRequest
+    {
+        /// <summary>
+        /// 删除 空 Bucket
+        /// </summary>
+        /// <param name="bucket"></param>
+        public DeleteBucketRequest(string bucket)
+            : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+        }
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ead9b4bca165cf7458acad7657719736
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 14 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketResult.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    /// <summary>
+    /// 删除 空 Bucket返回的结果
+    /// </summary>
+    public sealed class DeleteBucketResult : CosResult
+    {
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketResult.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 787ffaf801d5ef848a266fc72a9bfdbe
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 17 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingRequest.cs

@@ -0,0 +1,17 @@
+using COSXML.Common;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketTaggingRequest : BucketRequest
+    {
+        public DeleteBucketTaggingRequest(string bucket) : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+            this.queryParameters.Add("tagging", null);
+        }
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 49767a14e82c71e4091a75915de6b3d8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingResult.cs

@@ -0,0 +1,8 @@
+
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketTaggingResult : CosResult
+    {
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketTaggingResult.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b1821b3c39080384baa51e0797d46e1a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 17 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketWebsiteRequest.cs

@@ -0,0 +1,17 @@
+using COSXML.Common;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketWebsiteRequest : BucketRequest
+    {
+        public DeleteBucketWebsiteRequest(string bucket) : base(bucket)
+        {
+            this.method = CosRequestMethod.DELETE;
+            this.queryParameters.Add("website", null);
+        }
+
+    }
+}

+ 11 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketWebsiteRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bf1030b6c6cf49e4aadbed74416c8580
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/COS/QCloudCSharpSDK/COSXML/Model/Bucket/DeleteBucketWebsiteResult.cs

@@ -0,0 +1,8 @@
+
+
+namespace COSXML.Model.Bucket
+{
+    public sealed class DeleteBucketWebsiteResult : CosResult
+    {
+    }
+}

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů