wupengfei 2 năm trước cách đây
mục cha
commit
2a1c57054b
100 tập tin đã thay đổi với 14919 bổ sung7 xóa
  1. 4 0
      .idea/gaoyixia.iml
  2. 4 0
      .idea/php.xml
  3. 363 4
      .idea/workspace.xml
  4. 27 3
      application/api/controller/VideoDemand.php
  5. 53 0
      vendor/samples/uploadAttachedMedia.php
  6. 52 0
      vendor/samples/uploadImage.php
  7. 101 0
      vendor/samples/uploadVideo.php
  8. 15 0
      vendor/voduploadsdk/Autoloader.php
  9. 26 0
      vendor/voduploadsdk/ChangeLog.txt
  10. 318 0
      vendor/voduploadsdk/aliyun-php-sdk-core/AcsRequest.php
  11. 64 0
      vendor/voduploadsdk/aliyun-php-sdk-core/AcsResponse.php
  12. 29 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/AbstractCredential.php
  13. 58 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/BearTokenSigner.php
  14. 78 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/BearerTokenCredential.php
  15. 153 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/Credential.php
  16. 78 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/EcsRamRoleCredential.php
  17. 108 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/EcsRamRoleService.php
  18. 37 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ISigner.php
  19. 128 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/RamRoleArnCredential.php
  20. 150 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/RamRoleArnService.php
  21. 58 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ShaHmac1Signer.php
  22. 58 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ShaHmac256Signer.php
  23. 76 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Autoloader/Autoloader.php
  24. 85 0
      vendor/voduploadsdk/aliyun-php-sdk-core/ChangeLog.txt
  25. 36 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Config.php
  26. 278 0
      vendor/voduploadsdk/aliyun-php-sdk-core/DefaultAcsClient.php
  27. 98 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Exception/ClientException.php
  28. 66 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Exception/ServerException.php
  29. 110 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Http/HttpHelper.php
  30. 72 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Http/HttpResponse.php
  31. 30 0
      vendor/voduploadsdk/aliyun-php-sdk-core/IAcsClient.php
  32. 300 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Profile/DefaultProfile.php
  33. 35 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Profile/IClientProfile.php
  34. 98 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Regions/Endpoint.php
  35. 65 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Regions/EndpointConfig.php
  36. 82 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Regions/EndpointProvider.php
  37. 194 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Regions/LocationService.php
  38. 76 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Regions/ProductDomain.php
  39. 4806 0
      vendor/voduploadsdk/aliyun-php-sdk-core/Regions/endpoints.xml
  40. 315 0
      vendor/voduploadsdk/aliyun-php-sdk-core/RoaAcsRequest.php
  41. 155 0
      vendor/voduploadsdk/aliyun-php-sdk-core/RpcAcsRequest.php
  42. 36 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/CredentialTest.php
  43. 30 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac1SignerTest.php
  44. 30 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac256SignerTest.php
  45. 49 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/BaseTest.php
  46. 31 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/BatchCompute/ListImagesRequest.php
  47. 43 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/DefaultAcsClientTest.php
  48. 117 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ecs/Rquest/DescribeRegionsRequest.php
  49. 107 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/InteTest.php
  50. 85 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/TestRoaApiRequest.php
  51. 61 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/TestRpcApiRequest.php
  52. 30 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Http/HttpHelperTest.php
  53. 66 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Profile/DefaultProfileTest.php
  54. 52 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Regions/EndPointByLocationTest.php
  55. 28 0
      vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Regions/EndpointProviderTest.php
  56. 2 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/.coveralls.yml
  57. 8 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/.gitignore
  58. 21 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/.travis.yml
  59. 132 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/CHANGELOG.md
  60. 21 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/LICENSE.md
  61. 149 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/README-CN.md
  62. 150 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/README.md
  63. 11 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/autoload.php
  64. 13 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/build-phar.sh
  65. 24 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/composer.json
  66. BIN
      vendor/voduploadsdk/aliyun-php-sdk-oss/example.jpg
  67. 3 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/index.php
  68. 19 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/phpunit.xml
  69. 168 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Bucket.php
  70. 108 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketCors.php
  71. 109 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketLifecycle.php
  72. 95 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketLogging.php
  73. 101 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketReferer.php
  74. 92 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketWebsite.php
  75. 83 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Callback.php
  76. 84 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Common.php
  77. 15 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Config.php
  78. 87 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Image.php
  79. 131 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/LiveChannel.php
  80. 182 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/MultipartUpload.php
  81. 518 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Object.php
  82. 13 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/RunAll.php
  83. 142 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Signature.php
  84. 263 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/MimeTypes.php
  85. 54 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/OssException.php
  86. 530 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/OssUtil.php
  87. 25 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/LICENSE
  88. 898 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/RequestCore.php
  89. 8 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/RequestCore_Exception.php
  90. 56 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/ResponseCore.php
  91. 181 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketInfo.php
  92. 39 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketListInfo.php
  93. 85 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketStat.php
  94. 99 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CnameConfig.php
  95. 113 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CorsConfig.php
  96. 150 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CorsRule.php
  97. 65 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeleteMarkerInfo.php
  98. 41 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeleteObjectInfo.php
  99. 63 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeletedObjectInfo.php
  100. 64 0
      vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ExtendWormConfig.php

+ 4 - 0
.idea/gaoyixia.iml

@@ -15,6 +15,10 @@
       <excludeFolder url="file://$MODULE_DIR$/vendor/lizhichao/one-sm" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php73" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/voduploadsdk/uploader" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />

+ 4 - 0
.idea/php.xml

@@ -75,6 +75,10 @@
       <path value="$PROJECT_DIR$/vendor/alibabacloud/vod-20170321" />
       <path value="$PROJECT_DIR$/vendor/alibabacloud/credentials" />
       <path value="$PROJECT_DIR$/vendor/lizhichao/one-sm" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/uploader" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core" />
     </include_path>
   </component>
 </project>

+ 363 - 4
.idea/workspace.xml

@@ -2,6 +2,360 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="1a36929e-c054-4875-a943-593a74e55fa4" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/vendor/samples/uploadAttachedMedia.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/samples/uploadImage.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/samples/uploadVideo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/Autoloader.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/ChangeLog.txt" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/AcsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/AcsResponse.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/AbstractCredential.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/BearTokenSigner.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/BearerTokenCredential.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/Credential.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/EcsRamRoleCredential.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/EcsRamRoleService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ISigner.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/RamRoleArnCredential.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/RamRoleArnService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ShaHmac1Signer.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ShaHmac256Signer.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Autoloader/Autoloader.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/ChangeLog.txt" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Config.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/DefaultAcsClient.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Exception/ClientException.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Exception/ServerException.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Http/HttpHelper.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Http/HttpResponse.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/IAcsClient.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Profile/DefaultProfile.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Profile/IClientProfile.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Regions/Endpoint.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Regions/EndpointConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Regions/EndpointProvider.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Regions/LocationService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Regions/ProductDomain.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/Regions/endpoints.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/RoaAcsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/RpcAcsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/CredentialTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac1SignerTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac256SignerTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/BaseTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/BatchCompute/ListImagesRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/DefaultAcsClientTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ecs/Rquest/DescribeRegionsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/InteTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/TestRoaApiRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/TestRpcApiRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Http/HttpHelperTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Profile/DefaultProfileTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Regions/EndPointByLocationTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Regions/EndpointProviderTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/.coveralls.yml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/.gitignore" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/.travis.yml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/CHANGELOG.md" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/LICENSE.md" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/README-CN.md" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/README.md" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/autoload.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/build-phar.sh" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/composer.json" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/example.jpg" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/index.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/phpunit.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Bucket.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketCors.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketLifecycle.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketLogging.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketReferer.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketWebsite.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Callback.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Common.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Config.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Image.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/LiveChannel.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/MultipartUpload.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Object.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/RunAll.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Signature.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/MimeTypes.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/OssException.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/OssUtil.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/LICENSE" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/RequestCore.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/RequestCore_Exception.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/ResponseCore.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketListInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketStat.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CnameConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CorsConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CorsRule.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeleteMarkerInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeleteObjectInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeletedObjectInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ExtendWormConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/GetLiveChannelHistory.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/GetLiveChannelInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/GetLiveChannelStatus.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/InitiateWormConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LifecycleAction.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LifecycleConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LifecycleRule.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ListMultipartUploadInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ListPartsInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LiveChannelConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LiveChannelHistory.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LiveChannelInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LiveChannelListInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/LoggingConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ObjectInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ObjectListInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ObjectVersionInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ObjectVersionListInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/PartInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/PrefixInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/RefererConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/RequestPaymentConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/RestoreConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ServerSideEncryptionConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/StorageCapacityConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/Tag.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/TaggingConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/UploadInfo.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/VersioningConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/WebsiteConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/WormConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/XmlConfig.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/OssClient.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/AclResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/AppendResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/BodyResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/CallbackResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/CopyObjectResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/DeleteObjectVersionsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/DeleteObjectsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/ExistResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetBucketEncryptionResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetBucketInfoResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetBucketRequestPaymentResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetBucketStatResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetBucketTagsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetBucketVersioningResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetBucketWormResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetCnameResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetCorsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetLifecycleResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetLiveChannelHistoryResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetLiveChannelInfoResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetLiveChannelStatusResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetLocationResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetLoggingResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetRefererResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetStorageCapacityResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/GetWebsiteResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/HeaderResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/InitiateBucketWormResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/InitiateMultipartUploadResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/ListBucketsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/ListLiveChannelResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/ListMultipartUploadResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/ListObjectVersionsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/ListObjectsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/ListPartsResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/PutLiveChannelResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/PutSetDeleteResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/Result.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/SymlinkResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Result/UploadPartResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/AclResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/BodyResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/BucketCnameTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/BucketInfoTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/BucketLiveChannelTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/CallbackTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/CnameConfigTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/Common.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ContentTypeTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/CopyObjectResult.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/CorsConfigTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/DeleteObjectVersionsResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ExistResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetBucketEncryptionResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetBucketRequestPaymentResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetBucketStatResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetBucketTagsResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetBucketWormResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetCorsResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetLifecycleResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetLoggingResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetRefererResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/GetWebsiteResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/HeaderResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/HttpTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/InitiateMultipartUploadResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/LifecycleConfigTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ListBucketsResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ListMultipartUploadResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ListObjectVersionsResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ListObjectsResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ListPartsResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/LiveChannelXmlTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/LoggingConfigTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/MimeTypesTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/ObjectAclTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketCorsTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketEncryptionTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketInfoTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketLifecycleTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketLoggingTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketPolicyTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketRefererTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketRequestPaymentTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketStatTestTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketStorageCapacityTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketTagsTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketVersioningTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketWebsiteTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientBucketWormTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientImageTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientListObjectsTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientMultipartUploadTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientObjectRequestPaymentTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientObjectTaggingTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientObjectTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientObjectVersioningTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientRestoreObjectTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientSignatureTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssClientTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssExceptionTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssTrafficLimitTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/OssUtilTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/PutSetDeleteResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/RefererConfigTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/StorageCapacityConfigTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/StorageCapacityTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/SymlinkTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/TestOssClientBase.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/UploadPartResultTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss/tests/OSS/Tests/WebsiteConfigTest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/ChangeLog.txt" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/AddAITemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/AddCategoryRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/AddEditingProjectRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/AddTranscodeTemplateGroupRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/AddVodTemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/AddWatermarkRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/AttachAppPolicyToIdentityRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/CreateAppInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/CreateAuditRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/CreateUploadAttachedMediaRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/CreateUploadImageRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/CreateUploadVideoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteAITemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteAppInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteAttachedMediaRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteCategoryRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteEditingProjectRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteImageRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteMessageCallbackRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteMezzaninesRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteMultipartUploadRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteStreamRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteTranscodeTemplateGroupRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteVideoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteVodTemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DeleteWatermarkRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribePlayTopVideosRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribePlayUserAvgRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribePlayUserTotalRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribePlayVideoStatisRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribeVodDomainBpsDataRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribeVodDomainLogRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribeVodDomainTrafficDataRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribeVodRefreshQuotaRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DescribeVodRefreshTasksRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/DetachAppPolicyFromIdentityRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetAIMediaAuditJobRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetAITemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetAppInfosRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetAttachedMediaInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetAuditHistoryRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetCategoriesRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetDefaultAITemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetEditingProjectMaterialsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetEditingProjectRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetImageInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetMediaAuditResultDetailRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetMediaAuditResultRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetMediaAuditResultTimelineRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetMediaDNAResultRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetMessageCallbackRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetMezzanineInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetPlayInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetTranscodeSummaryRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetTranscodeTaskRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetTranscodeTemplateGroupRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetURLUploadInfosRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetVideoInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetVideoInfosRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetVideoListRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetVideoPlayAuthRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetVodTemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/GetWatermarkRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListAIJobRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListAITemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListAppInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListAppPoliciesForIdentityRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListAuditSecurityIpRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListLiveRecordVideoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListSnapshotsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListTranscodeTaskRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListTranscodeTemplateGroupRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListVodTemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ListWatermarkRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/MoveAppResourceRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/PreloadVodObjectCachesRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/ProduceEditingProjectVideoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/RefreshUploadVideoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/RefreshVodObjectCachesRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/RegisterMediaRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SearchEditingProjectRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SearchMediaRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SetAuditSecurityIpRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SetDefaultAITemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SetDefaultTranscodeTemplateGroupRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SetDefaultWatermarkRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SetEditingProjectMaterialsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SetMessageCallbackRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SubmitAIJobRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SubmitAIMediaAuditJobRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SubmitPreprocessJobsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SubmitSnapshotJobRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/SubmitTranscodeJobsRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateAITemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateAppInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateAttachedMediaInfosRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateCategoryRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateEditingProjectRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateImageInfosRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateTranscodeTemplateGroupRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateVideoInfoRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateVideoInfosRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateVodTemplateRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UpdateWatermarkRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod/vod/Request/V20170321/UploadMediaByURLRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/uploader/AliyunVodUploader.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/uploader/AliyunVodUtils.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/uploader/UploadAttachedMediaRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/uploader/UploadImageRequest.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/vendor/voduploadsdk/uploader/UploadVideoRequest.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/gaoyixia.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/gaoyixia.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/php.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/php.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/application/api/controller/VideoDemand.php" beforeDir="false" afterPath="$PROJECT_DIR$/application/api/controller/VideoDemand.php" afterDir="false" />
     </list>
@@ -101,6 +455,10 @@
       <path value="$PROJECT_DIR$/vendor/alibabacloud/vod-20170321" />
       <path value="$PROJECT_DIR$/vendor/alibabacloud/credentials" />
       <path value="$PROJECT_DIR$/vendor/lizhichao/one-sm" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/uploader" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-oss" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-vod" />
+      <path value="$PROJECT_DIR$/vendor/voduploadsdk/aliyun-php-sdk-core" />
     </include_path>
   </component>
   <component name="ProjectId" id="2CCTRIjtQujUBealCzdAl9v5TA4" />
@@ -117,7 +475,7 @@
     <property name="WebServerToolWindowPanel.toolwindow.show.date" value="false" />
     <property name="WebServerToolWindowPanel.toolwindow.show.permissions" value="false" />
     <property name="WebServerToolWindowPanel.toolwindow.show.size" value="false" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/../xianglian_test_api" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/vendor" />
     <property name="node.js.detected.package.eslint" value="true" />
     <property name="node.js.detected.package.tslint" value="true" />
     <property name="node.js.path.for.package.eslint" value="project" />
@@ -128,6 +486,7 @@
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\zs\gaoyixia\vendor" />
       <recent name="D:\zs\gaoyixia\application\api\controller" />
       <recent name="D:\zs\gaoyixia\public" />
       <recent name="D:\zs\gaoyixia\application\common\model" />
@@ -176,7 +535,7 @@
       <workItem from="1660611515701" duration="6983000" />
       <workItem from="1660697982291" duration="9650000" />
       <workItem from="1660730926670" duration="1018000" />
-      <workItem from="1660783282150" duration="9994000" />
+      <workItem from="1660783282150" duration="11316000" />
     </task>
     <servers />
   </component>
@@ -236,9 +595,9 @@
       <screen x="0" y="0" width="2560" height="1400" />
     </state>
     <state x="1058" y="441" width="617" height="490" key="find.popup/0.0.2560.1400@0.0.2560.1400" timestamp="1660362836071" />
-    <state x="1237" y="367" width="672" height="678" key="search.everywhere.popup" timestamp="1660731173026">
+    <state x="1237" y="367" width="672" height="678" key="search.everywhere.popup" timestamp="1660804167284">
       <screen x="0" y="0" width="2560" height="1400" />
     </state>
-    <state x="1237" y="367" width="672" height="678" key="search.everywhere.popup/0.0.2560.1400@0.0.2560.1400" timestamp="1660731173026" />
+    <state x="1237" y="367" width="672" height="678" key="search.everywhere.popup/0.0.2560.1400@0.0.2560.1400" timestamp="1660804167284" />
   </component>
 </project>

+ 27 - 3
application/api/controller/VideoDemand.php

@@ -160,10 +160,10 @@ class VideoDemand extends Base
      * @author qc
      * @url /api/Video_demand/refreshUploadVideoToken
      * @method GET
-     * @tag 获取视频上传凭证
+     * @tag 刷新视频上传凭证
      * @header name:Authorization require:1 desc:Token
      * @header name:Authorization require:1 desc:Token
-     * @param  name:videoId type:string default:-- desc:videoId
+     * @param  name:ali_vid type:string default:-- desc:videoId
      * @return name:uploadAddress type:string default:-- desc:uploadAddress
      * @return name:uploadAuth type:string default:-- desc:uploadAuth
      * @return name:videoId type:string default:-- desc:videoId
@@ -260,7 +260,31 @@ class VideoDemand extends Base
 
 
 
-
+// 测试上传网络视频
+    function testUploadWebVideo()
+    {
+        if (!($file = $this->getUploadFile()) || empty($file)) $this->error('文件上传异常,文件可能过大或未上传!');
+        if (!$file->checkExt(strtolower(sysconf('storage_local_exts')))) $this->error('文件上传类型受限,请在后台配置!');
+        if ($file->checkExt('php,sh')) $this->error('可执行文件禁止上传到本地服务器!');
+        $size = $file->getSize();
+        $file_name = $file->getInfo('name');
+        $extend = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
+        var_dump($file);die();
+        $up_param = [
+            'fileName'=>$file_name,
+            'FileSize'=>$size,
+            'title'=>'视频上传',
+        ];
+        try {
+            $uploader = new \AliyunVodUploader($this->access_key, $this->access_secret);
+            $uploadVideoRequest = new \UploadVideoRequest($fileURL, 'testUploadWebVideo via PHP-SDK');
+            $res = $uploader->uploadWebVideo($uploadVideoRequest);
+            print_r($res);
+        } catch (Exception $e) {
+            printf("testUploadWebVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
+                $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
+        }
+    }
 
 
 }

+ 53 - 0
vendor/samples/uploadAttachedMedia.php

@@ -0,0 +1,53 @@
+<?php
+/**
+ * Created by Aliyun ApsaraVideo VoD.
+ * User: https://www.aliyun.com/product/vod
+ * API document: https://help.aliyun.com/document_detail/98467.html
+ */
+
+require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
+
+date_default_timezone_set('PRC');
+
+// 测试上传本地辅助媒资文件
+function testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $filePath)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadAttachedRequest = new UploadAttachedMediaRequest($filePath, 'watermark',
+            'testUploadLocalAttachedMedia via PHP-SDK');
+        //$uploadAttachedRequest->setCateId(1000009458);
+        $res = $uploader->uploadLocalAttachedMedia($uploadAttachedRequest);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadLocalAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
+    }
+
+}
+
+// 测试上传网络辅助媒资文件
+function testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $fileURL)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadAttachedRequest = new UploadAttachedMediaRequest($fileURL, 'watermark',
+            'testUploadWebAttachedMedia via PHP-SDK');
+        //$uploadAttachedRequest->setCateId(1000009458);
+        $res = $uploader->uploadWebAttachedMedia($uploadAttachedRequest);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadWebAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
+    }
+
+}
+
+
+####  执行测试代码   ####
+$accessKeyId = '<AccessKeyId>';
+$accessKeySecret = '<AccessKeySecret>';
+
+$localFilePath = '/opt/image/test.png';
+//testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $localFilePath);
+
+$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F386E0B.gif';
+testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $webFileURL);

+ 52 - 0
vendor/samples/uploadImage.php

@@ -0,0 +1,52 @@
+<?php
+/**
+ * Created by Aliyun ApsaraVideo VoD.
+ * User: https://www.aliyun.com/product/vod
+ * API document: https://help.aliyun.com/document_detail/55619.html
+ */
+
+require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
+
+date_default_timezone_set('PRC');
+
+// 测试上传本地图片
+function testUploadLocalImage($accessKeyId, $accessKeySecret, $filePath)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadImageRequest = new UploadImageRequest($filePath, 'testUploadLocalImage via PHP-SDK');
+        $uploadImageRequest->setCateId(1000009458);
+        $res = $uploader->uploadLocalImage($uploadImageRequest);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadLocalImage Failed, ErrorMessage: %s\n", $e->getMessage());
+    }
+
+}
+
+// 测试上传网络图片
+function testUploadWebImage($accessKeyId, $accessKeySecret, $fileURL)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadImageRequest = new UploadImageRequest($fileURL, 'testUploadWebImage via PHP-SDK');
+        $uploadImageRequest->setCateId(1000009458);
+        $res = $uploader->uploadWebImage($uploadImageRequest);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadWebImage Failed, ErrorMessage: %s\n", $e->getMessage());
+    }
+
+}
+
+
+
+####  执行测试代码   ####
+$accessKeyId = '<AccessKeyId>';
+$accessKeySecret = '<AccessKeySecret>';
+
+$localFilePath = '/opt/image/test-image.jpg';
+//testUploadLocalImage($accessKeyId, $accessKeySecret, $localFilePath);
+
+$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F386E0B.gif';
+testUploadWebImage($accessKeyId, $accessKeySecret, $webFileURL);

+ 101 - 0
vendor/samples/uploadVideo.php

@@ -0,0 +1,101 @@
+<?php
+/**
+ * Created by Aliyun ApsaraVideo VoD.
+ * User: https://www.aliyun.com/product/vod
+ * API document: https://help.aliyun.com/document_detail/55407.html
+ */
+
+require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
+
+date_default_timezone_set('PRC');
+
+// 测试上传本地视频
+function testUploadLocalVideo($accessKeyId, $accessKeySecret, $filePath)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadVideoRequest = new UploadVideoRequest($filePath, 'testUploadLocalVideo via PHP-SDK');
+        //$uploadVideoRequest->setCateId(1);
+        //$uploadVideoRequest->setCoverURL("http://xxxx.jpg");
+        //$uploadVideoRequest->setTags('test1,test2');
+        //$uploadVideoRequest->setStorageLocation('outin-xx.oss-cn-beijing.aliyuncs.com');
+        //$uploadVideoRequest->setTemplateGroupId('6ae347b0140181ad371d197ebe289326');
+        $userData = array(
+            "MessageCallback"=>array("CallbackURL"=>"https://demo.sample.com/ProcessMessageCallback"),
+            "Extend"=>array("localId"=>"xxx", "test"=>"www")
+        );
+        $uploadVideoRequest->setUserData(json_encode($userData));
+        $res = $uploader->uploadLocalVideo($uploadVideoRequest);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadLocalVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
+            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
+    }
+}
+
+// 测试上传网络视频
+function testUploadWebVideo($accessKeyId, $accessKeySecret, $fileURL)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadVideoRequest = new UploadVideoRequest($fileURL, 'testUploadWebVideo via PHP-SDK');
+        $res = $uploader->uploadWebVideo($uploadVideoRequest);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadWebVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
+            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
+    }
+}
+
+// 测试上传本地m3u8视频
+function testUploadLocalM3u8($accessKeyId, $accessKeySecret, $m3u8FilePath)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadVideoRequest = new UploadVideoRequest($m3u8FilePath, 'testUploadLocalM3u8 via PHP-SDK');
+        // 调用接口解析m3u8的分片地址列表,如果解析结果不准确,请自行拼接地址列表(默认分片文件和m3u8文件位于同一目录)
+        $sliceFiles = $uploader->parseM3u8File($m3u8FilePath);
+        //print_r($sliceFiles);
+        $res = $uploader->uploadLocalM3u8($uploadVideoRequest, $sliceFiles);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadLocalM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
+            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
+    }
+}
+
+// 测试上传网络m3u8视频
+function testUploadWebM3u8($accessKeyId, $accessKeySecret, $m3u8FileUrl)
+{
+    try {
+        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
+        $uploadVideoRequest = new UploadVideoRequest($m3u8FileUrl, 'testUploadWebM3u8 via PHP-SDK');
+        // 调用接口解析m3u8的分片地址列表,如果解析结果不准确,请自行拼接地址列表(默认分片文件和m3u8文件位于同一目录)
+        $sliceFileUrls = $uploader->parseM3u8File($m3u8FileUrl);
+        //print_r($sliceFileUrls);
+        $res = $uploader->uploadWebM3u8($uploadVideoRequest, $sliceFileUrls);
+        print_r($res);
+    } catch (Exception $e) {
+        printf("testUploadWebM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
+            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
+    }
+}
+
+
+####  执行测试代码   ####
+$accessKeyId = '<AccessKeyId>';
+$accessKeySecret = '<AccessKeySecret>';
+
+
+//$localFilePath = 'C:\test\sample.mp4';
+$localFilePath = '/opt/video/sample.mp4';
+//testUploadLocalVideo($accessKeyId, $accessKeySecret, $localFilePath);
+
+$webFileURL = 'http://vod-test1.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc95c8/daa30814c0c340cf8199926f78aa5c0e-a0bc05ba62c3e95cc672e88b828148c9-ld.mp4?auth_key=1608774986-0-0-c56acd302bea0c331370d8ed686502fe';
+testUploadWebVideo($accessKeyId, $accessKeySecret, $webFileURL);
+
+$localM3u8FilePath = '/opt/video/m3u8/sample.m3u8';
+//testUploadLocalM3u8($accessKeyId, $accessKeySecret, $localM3u8FilePath);
+
+$webM3u8FileURL = 'http://vod-test1.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc95c8/daa30814c0c340cf8199926f78aa5c0e-195a25af366b5edae324c47e99a03f04-ld.m3u8?auth_key=1608775606-0-0-9fb038deaecd009dadd86721c5855629';
+//testUploadWebM3u8($accessKeyId, $accessKeySecret, $webM3u8FileURL);

+ 15 - 0
vendor/voduploadsdk/Autoloader.php

@@ -0,0 +1,15 @@
+<?php
+
+function VodClassLoader($class)
+{
+    $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
+    $file = __DIR__ . DIRECTORY_SEPARATOR . 'uploader'. DIRECTORY_SEPARATOR . $path . '.php';
+    if (file_exists($file)) {
+        require_once $file;
+    }
+}
+spl_autoload_register('VodClassLoader');
+
+require_once  __DIR__ . DIRECTORY_SEPARATOR . 'aliyun-php-sdk-core' . DIRECTORY_SEPARATOR . 'Config.php';
+require_once  __DIR__ . DIRECTORY_SEPARATOR . 'aliyun-php-sdk-oss' .DIRECTORY_SEPARATOR . 'autoload.php';
+

+ 26 - 0
vendor/voduploadsdk/ChangeLog.txt

@@ -0,0 +1,26 @@
+2022-03-03 Version: 1.0.3
+1.OSS组件更新,支持php8.0及以上环境
+
+2019-04-12 Version: 1.0.2
+1.上传时可指定应用ID,以实现多应用体系的资源隔离
+2.支持上传时指定工作流ID,可自动化媒体处理
+
+
+2019-02-28 Version: 1.0.1
+1.上传图片和辅助媒资支持设置UserData
+2.修复海外区域上传异常的问题
+
+
+2018-12-21 Version: 1.0.0
+主要功能:
+1.可上传各种媒体文件到点播:视频(含音频)、图片、辅助媒资(如水印、字幕文件)。
+2.上传本地媒体文件到点播,默认使用分片上传,最大支持48.8TB的单个文件;暂不支持断点续传。
+3.上传网络媒体文件到点播,最大支持48.8TB的单个文件,会先下载到本地临时目录再上传;暂不支持断点续传。
+4.上传M3U8视频,同时提供解析M3U8索引文件得到分片地址列表的接口;也可自行指定分片文件地址。
+
+其它功能:
+1.上传进度条功能,支持默认进度回调和自定义进度回调。
+2.可指定上传脚本部署的ECS区域,如果和点播存储区域相同,则自动替换OSS的Endpoint为内网地址。
+3.可指定点播中心(默认为上海)和存储区域,便于海外上传。
+4.支持上传时设置元数据(标题等),以及StorageLocation、UserData、转码模板等。
+

+ 318 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/AcsRequest.php

@@ -0,0 +1,318 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+abstract class AcsRequest
+{
+    /**
+     * @var string
+     */
+    protected $version;
+    /**
+     * @var string
+     */
+    protected $product;
+    /**
+     * @var string
+     */
+    protected $actionName;
+    /**
+     * @var string
+     */
+    protected $regionId;
+    /**
+     * @var string
+     */
+    protected $acceptFormat;
+    /**
+     * @var string
+     */
+    protected $method;
+    /**
+     * @var string
+     */
+    protected $requestScheme = 'http';
+    /**
+     * @var string
+     */
+    protected $content;
+    /**
+     * @var array
+     */
+    protected $queryParameters = array();
+    /**
+     * @var array
+     */
+    protected $headers = array();
+    /**
+     * @var null|string
+     */
+    protected $locationServiceCode;
+    /**
+     * @var null|string
+     */
+    protected $locationEndpointType;
+    /**
+     * @var array The original parameters of the request object.
+     */
+    protected $requestParameters = array();
+    /**
+     * @var string
+     */
+    protected $stringToBeSigned = '';
+
+    /**
+     * AcsRequest constructor.
+     *
+     * @param string      $product
+     * @param string      $version
+     * @param string      $actionName
+     * @param string|null $locationServiceCode
+     * @param string      $locationEndpointType
+     */
+    public function __construct($product,
+                                $version,
+                                $actionName,
+                                $locationServiceCode = null,
+                                $locationEndpointType = 'openAPI')
+    {
+        $this->headers['x-sdk-client'] = 'php/2.0.0';
+        $this->product                 = $product;
+        $this->version                 = $version;
+        $this->actionName              = $actionName;
+        $this->locationServiceCode     = $locationServiceCode;
+        $this->locationEndpointType    = $locationEndpointType;
+    }
+
+    /**
+     * @param $iSigner
+     * @param $credential
+     * @param $domain
+     *
+     * @return mixed
+     */
+    abstract public function composeUrl($iSigner, $credential, $domain);
+
+    /**
+     * @return string
+     */
+    public function getVersion()
+    {
+        return $this->version;
+    }
+
+    /**
+     * @param $version
+     */
+    public function setVersion($version)
+    {
+        $this->version = $version;
+    }
+
+    /**
+     * @return string
+     */
+    public function getProduct()
+    {
+        return $this->product;
+    }
+
+    /**
+     * @param string $product
+     */
+    public function setProduct($product)
+    {
+        $this->product = $product;
+    }
+
+    /**
+     * @return string
+     */
+    public function getActionName()
+    {
+        return $this->actionName;
+    }
+
+    /**
+     * @param string $actionName
+     */
+    public function setActionName($actionName)
+    {
+        $this->actionName = $actionName;
+    }
+
+    /**
+     * @return string
+     */
+    public function getAcceptFormat()
+    {
+        return $this->acceptFormat;
+    }
+
+    /**
+     * @param string $acceptFormat
+     */
+    public function setAcceptFormat($acceptFormat)
+    {
+        $this->acceptFormat = $acceptFormat;
+    }
+
+    /**
+     * @return array
+     */
+    public function getQueryParameters()
+    {
+        return $this->queryParameters;
+    }
+
+    /**
+     * @return array
+     */
+    public function getHeaders()
+    {
+        return $this->headers;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return $this->method;
+    }
+
+    /**
+     * @param string $method
+     */
+    public function setMethod($method)
+    {
+        $this->method = $method;
+    }
+
+    /**
+     * @return string
+     */
+    public function getProtocol()
+    {
+        return $this->requestScheme;
+    }
+
+    /**
+     * @param string $protocol
+     */
+    public function setProtocol($protocol)
+    {
+        $this->requestScheme = $protocol;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRegionId()
+    {
+        return $this->regionId;
+    }
+
+    /**
+     * @param string $region
+     */
+    public function setRegionId($region)
+    {
+        $this->regionId = $region;
+    }
+
+    /**
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * @param string $content
+     */
+    public function setContent($content)
+    {
+        $this->content = $content;
+    }
+
+    /**
+     * @param string $headerKey
+     * @param mixed  $headerValue
+     */
+    public function addHeader($headerKey, $headerValue)
+    {
+        $this->headers[$headerKey] = $headerValue;
+    }
+
+    /**
+     * @return null|string
+     */
+    public function getLocationServiceCode()
+    {
+        return $this->locationServiceCode;
+    }
+
+    /**
+     * @return null|string
+     */
+    public function getLocationEndpointType()
+    {
+        return $this->locationEndpointType;
+    }
+
+    /**
+     * Magic method for get parameters.
+     *
+     * @param string $name
+     * @param mixed  $arguments
+     *
+     * @return $this
+     */
+    public function __call($name, $arguments)
+    {
+        if (\strpos($name, 'get', 0) !== false) {
+            $parameterName = $this->propertyNameByMethodName($name);
+            return isset($this->requestParameters[$parameterName])
+                ? $this->requestParameters[$parameterName]
+                : null;
+        }
+        return $this;
+    }
+
+    /**
+     * @param string $methodName
+     *
+     * @return string
+     */
+    protected function propertyNameByMethodName($methodName)
+    {
+        return \mb_strcut($methodName, 3);
+    }
+
+    /**
+     * @return string
+     */
+    public function stringToBeSigned()
+    {
+        return $this->stringToBeSigned;
+    }
+}

+ 64 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/AcsResponse.php

@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class AcsResponse
+{
+    /**
+     * @var string
+     */
+    private $code;
+    /**
+     * @var string
+     */
+    private $message;
+
+    /**
+     * @return string
+     */
+    public function getCode()
+    {
+        return $this->code;
+    }
+
+    /**
+     * @param string $code
+     */
+    public function setCode($code)
+    {
+        $this->code = $code;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMessage()
+    {
+        return $this->message;
+    }
+
+    /**
+     * @param string $message
+     */
+    public function setMessage($message)
+    {
+        $this->message = $message;
+    }
+}

+ 29 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/AbstractCredential.php

@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+abstract class AbstractCredential
+{
+    abstract public function getAccessKeyId();
+
+    abstract public function getAccessSecret();
+
+    abstract public function getSecurityToken();
+}

+ 58 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/BearTokenSigner.php

@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class BearTokenSigner implements ISigner
+{
+    /**
+     * @param $source
+     * @param $accessSecret
+     *
+     * @return null
+     */
+    public function signString($source, $accessSecret)
+    {
+        return null;
+    }
+
+    /**
+     * @return null
+     */
+    public function getSignatureMethod()
+    {
+        return null;
+    }
+
+    /**
+     * @return string
+     */
+    public function getSignatureVersion()
+    {
+        return '1.0';
+    }
+
+    /**
+     * @return string
+     */
+    public function getSignatureType()
+    {
+        return 'BEARERTOKEN';
+    }
+}

+ 78 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/BearerTokenCredential.php

@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class BearerTokenCredential extends AbstractCredential
+{
+    /**
+     * @var string
+     */
+    private $bearerToken;
+
+    /**
+     * BearerTokenCredential constructor.
+     *
+     * @param $bearerToken
+     */
+    public function __construct($bearerToken)
+    {
+        $this->bearerToken = $bearerToken;
+    }
+
+    /**
+     * @return null
+     */
+    public function getAccessKeyId()
+    {
+        return null;
+    }
+
+    /**
+     * @return null
+     */
+    public function getAccessSecret()
+    {
+        return null;
+    }
+
+    /**
+     * @return string
+     */
+    public function getBearerToken()
+    {
+        return $this->bearerToken;
+    }
+
+    /**
+     * @param $bearerToken
+     */
+    public function setBearerToken($bearerToken)
+    {
+        $this->bearerToken = $bearerToken;
+    }
+
+    /**
+     * @return null
+     */
+    public function getSecurityToken()
+    {
+        return null;
+    }
+}

+ 153 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/Credential.php

@@ -0,0 +1,153 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Credential extends AbstractCredential
+{
+    /**
+     * @var string
+     */
+    private $dateTimeFormat = 'Y-m-d\TH:i:s\Z';
+    /**
+     * @var false|string
+     */
+    private $refreshDate;
+    /**
+     * @var string
+     */
+    private $expiredDate;
+    /**
+     * @var string
+     */
+    private $accessKeyId;
+    /**
+     * @var string
+     */
+    private $accessSecret;
+    /**
+     * @var string
+     */
+    private $securityToken;
+
+    /**
+     * Credential constructor.
+     *
+     * @param $accessKeyId
+     * @param $accessSecret
+     * @param $securityToken
+     */
+    public function __construct($accessKeyId, $accessSecret, $securityToken)
+    {
+        $this->accessKeyId   = $accessKeyId;
+        $this->accessSecret  = $accessSecret;
+        $this->securityToken = $securityToken;
+        $this->refreshDate   = date($this->dateTimeFormat);
+    }
+
+    /**
+     * @return bool
+     */
+    public function isExpired()
+    {
+        if ($this->expiredDate == null) {
+            return false;
+        }
+        if (strtotime($this->expiredDate) > strtotime(date($this->dateTimeFormat))) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * @return false|string
+     */
+    public function getRefreshDate()
+    {
+        return $this->refreshDate;
+    }
+
+    /**
+     * @return string
+     */
+    public function getExpiredDate()
+    {
+        return $this->expiredDate;
+    }
+
+    /**
+     * @param $expiredHours
+     *
+     * @return false|string
+     */
+    public function setExpiredDate($expiredHours)
+    {
+        if ($expiredHours > 0) {
+            return $this->expiredDate = date($this->dateTimeFormat, strtotime('+' . $expiredHours . ' hour'));
+        }
+    }
+
+    /**
+     * @return string
+     */
+    public function getAccessKeyId()
+    {
+        return $this->accessKeyId;
+    }
+
+    /**
+     * @param $accessKeyId
+     */
+    public function setAccessKeyId($accessKeyId)
+    {
+        $this->accessKeyId = $accessKeyId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getAccessSecret()
+    {
+        return $this->accessSecret;
+    }
+
+    /**
+     * @param $accessSecret
+     */
+    public function setAccessSecret($accessSecret)
+    {
+        $this->accessSecret = $accessSecret;
+    }
+
+    /**
+     * @return string
+     */
+    public function getSecurityToken()
+    {
+        return $this->securityToken;
+    }
+
+    /**
+     * @param $securityToken
+     */
+    public function setSecurityToken($securityToken)
+    {
+        $this->securityToken = $securityToken;
+    }
+}

+ 78 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/EcsRamRoleCredential.php

@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class EcsRamRoleCredential extends AbstractCredential
+{
+    /**
+     * @var string
+     */
+    private $roleName;
+
+    /**
+     * EcsRamRoleCredential constructor.
+     *
+     * @param $roleName
+     */
+    public function __construct($roleName)
+    {
+        $this->roleName = $roleName;
+    }
+
+    /**
+     * @return null
+     */
+    public function getAccessKeyId()
+    {
+        return null;
+    }
+
+    /**
+     * @return null
+     */
+    public function getAccessSecret()
+    {
+        return null;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRoleName()
+    {
+        return $this->roleName;
+    }
+
+    /**
+     * @param $roleName
+     */
+    public function setRoleName($roleName)
+    {
+        $this->roleName = $roleName;
+    }
+
+    /**
+     * @return null
+     */
+    public function getSecurityToken()
+    {
+        return null;
+    }
+}

+ 108 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/EcsRamRoleService.php

@@ -0,0 +1,108 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ */
+define('ECS_ROLE_EXPIRE_TIME', 3600);
+
+class EcsRamRoleService
+{
+
+    /**
+     * @var IClientProfile
+     */
+    private $clientProfile;
+    /**
+     * @var string|null
+     */
+    private $lastClearTime = null;
+    /**
+     * @var string|null
+     */
+    private $sessionCredential = null;
+
+    /**
+     * EcsRamRoleService constructor.
+     *
+     * @param $clientProfile
+     */
+    public function __construct($clientProfile)
+    {
+        $this->clientProfile = $clientProfile;
+    }
+
+    /**
+     * @return Credential|string|null
+     * @throws ClientException
+     */
+    public function getSessionCredential()
+    {
+        if ($this->lastClearTime != null && $this->sessionCredential != null) {
+            $now         = time();
+            $elapsedTime = $now - $this->lastClearTime;
+            if ($elapsedTime <= ECS_ROLE_EXPIRE_TIME * 0.8) {
+                return $this->sessionCredential;
+            }
+        }
+
+        $credential = $this->assumeRole();
+
+        if ($credential == null) {
+            return null;
+        }
+
+        $this->sessionCredential = $credential;
+        $this->lastClearTime     = time();
+
+        return $credential;
+    }
+
+    /**
+     * @return Credential|null
+     * @throws ClientException
+     */
+    private function assumeRole()
+    {
+        $ecsRamRoleCredential = $this->clientProfile->getCredential();
+
+        $requestUrl =
+            'http://100.100.100.200/latest/meta-data/ram/security-credentials/' . $ecsRamRoleCredential->getRoleName();
+
+        $httpResponse = HttpHelper::curl($requestUrl, 'GET', null, null);
+        if (!$httpResponse->isSuccess()) {
+            return null;
+        }
+
+        $respObj = json_decode($httpResponse->getBody());
+
+        $code = $respObj->Code;
+        if ($code != 'Success') {
+            return null;
+        }
+
+        $sessionAccessKeyId     = $respObj->AccessKeyId;
+        $sessionAccessKeySecret = $respObj->AccessKeySecret;
+        $securityToken          = $respObj->SecurityToken;
+
+        return new Credential($sessionAccessKeyId, $sessionAccessKeySecret, $securityToken);
+    }
+
+}

+ 37 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ISigner.php

@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+interface ISigner
+{
+    public function getSignatureMethod();
+
+    public function getSignatureVersion();
+
+    /**
+     * @param $source
+     * @param $accessSecret
+     *
+     * @return mixed
+     */
+    public function signString($source, $accessSecret);
+
+    public function getSignatureType();
+}

+ 128 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/RamRoleArnCredential.php

@@ -0,0 +1,128 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class RamRoleArnCredential extends AbstractCredential
+{
+    /**
+     * @var string
+     */
+    private $accessKeyId;
+    /**
+     * @var string
+     */
+    private $accessSecret;
+    /**
+     * @var string
+     */
+    private $roleArn;
+    /**
+     * @var string
+     */
+    private $roleSessionName;
+
+    /**
+     * RamRoleArnCredential constructor.
+     *
+     * @param $accessKeyId
+     * @param $accessSecret
+     * @param $roleArn
+     * @param $roleSessionName
+     */
+    public function __construct($accessKeyId, $accessSecret, $roleArn, $roleSessionName)
+    {
+        $this->accessKeyId     = $accessKeyId;
+        $this->accessSecret    = $accessSecret;
+        $this->roleArn         = $roleArn;
+        $this->roleSessionName = $roleSessionName;
+    }
+
+    /**
+     * @return string
+     */
+    public function getAccessKeyId()
+    {
+        return $this->accessKeyId;
+    }
+
+    /**
+     * @param $accessKeyId
+     */
+    public function setAccessKeyId($accessKeyId)
+    {
+        $this->accessKeyId = $accessKeyId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getAccessSecret()
+    {
+        return $this->accessSecret;
+    }
+
+    /**
+     * @param $accessSecret
+     */
+    public function setAccessSecret($accessSecret)
+    {
+        $this->accessSecret = $accessSecret;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRoleArn()
+    {
+        return $this->roleArn;
+    }
+
+    /**
+     * @param $roleArn
+     */
+    public function setRoleArn($roleArn)
+    {
+        $this->roleArn = $roleArn;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRoleSessionName()
+    {
+        return $this->roleSessionName;
+    }
+
+    /**
+     * @param $roleSessionName
+     */
+    public function setRoleSessionName($roleSessionName)
+    {
+        $this->roleSessionName = $roleSessionName;
+    }
+
+    /**
+     * @return null
+     */
+    public function getSecurityToken()
+    {
+        return null;
+    }
+}

+ 150 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/RamRoleArnService.php

@@ -0,0 +1,150 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ */
+define('STS_PRODUCT_NAME', 'Sts');
+/**
+ *
+ */
+define('STS_DOMAIN', 'sts.aliyuncs.com');
+/**
+ *
+ */
+define('STS_VERSION', '2015-04-01');
+/**
+ *
+ */
+define('STS_ACTION', 'AssumeRole');
+/**
+ *
+ */
+define('STS_REGION', 'cn-hangzhou');
+/**
+ *
+ */
+define('ROLE_ARN_EXPIRE_TIME', 3600);
+
+class AssumeRoleRequest extends RpcAcsRequest
+{
+    /**
+     * AssumeRoleRequest constructor.
+     *
+     * @param $roleArn
+     * @param $roleSessionName
+     */
+    public function __construct($roleArn, $roleSessionName)
+    {
+        parent::__construct(STS_PRODUCT_NAME, STS_VERSION, STS_ACTION);
+
+        $this->queryParameters['RoleArn']         = $roleArn;
+        $this->queryParameters['RoleSessionName'] = $roleSessionName;
+        $this->queryParameters['DurationSeconds'] = ROLE_ARN_EXPIRE_TIME;
+        $this->setRegionId(ROLE_ARN_EXPIRE_TIME);
+        $this->setProtocol('https');
+
+        $this->setAcceptFormat('JSON');
+    }
+}
+
+class RamRoleArnService
+{
+    /**
+     * @var IClientProfile
+     */
+    private $clientProfile;
+    /**
+     * @var null|string
+     */
+    private $lastClearTime = null;
+    /**
+     * @var null|string
+     */
+    private $sessionCredential = null;
+    /**
+     * @var string
+     */
+    public static $serviceDomain = STS_DOMAIN;
+
+    /**
+     * RamRoleArnService constructor.
+     *
+     * @param $clientProfile
+     */
+    public function __construct($clientProfile)
+    {
+        $this->clientProfile = $clientProfile;
+    }
+
+    /**
+     * @return Credential|string|null
+     * @throws ClientException
+     */
+    public function getSessionCredential()
+    {
+        if ($this->lastClearTime != null && $this->sessionCredential != null) {
+            $now         = time();
+            $elapsedTime = $now - $this->lastClearTime;
+            if ($elapsedTime <= ROLE_ARN_EXPIRE_TIME * 0.8) {
+                return $this->sessionCredential;
+            }
+        }
+
+        $credential = $this->assumeRole();
+
+        if ($credential == null) {
+            return null;
+        }
+
+        $this->sessionCredential = $credential;
+        $this->lastClearTime     = time();
+
+        return $credential;
+    }
+
+    /**
+     * @return Credential|null
+     * @throws ClientException
+     */
+    private function assumeRole()
+    {
+        $signer               = $this->clientProfile->getSigner();
+        $ramRoleArnCredential = $this->clientProfile->getCredential();
+
+        $request =
+            new AssumeRoleRequest($ramRoleArnCredential->getRoleArn(), $ramRoleArnCredential->getRoleSessionName());
+
+        $requestUrl = $request->composeUrl($signer, $ramRoleArnCredential, self::$serviceDomain);
+
+        $httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), null, $request->getHeaders());
+
+        if (!$httpResponse->isSuccess()) {
+            return null;
+        }
+
+        $respObj = json_decode($httpResponse->getBody());
+
+        $sessionAccessKeyId     = $respObj->Credentials->AccessKeyId;
+        $sessionAccessKeySecret = $respObj->Credentials->AccessKeySecret;
+        $securityToken          = $respObj->Credentials->SecurityToken;
+        return new Credential($sessionAccessKeyId, $sessionAccessKeySecret, $securityToken);
+    }
+}

+ 58 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ShaHmac1Signer.php

@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class ShaHmac1Signer implements ISigner
+{
+    /**
+     * @param $source
+     * @param $accessSecret
+     *
+     * @return string
+     */
+    public function signString($source, $accessSecret)
+    {
+        return base64_encode(hash_hmac('sha1', $source, $accessSecret, true));
+    }
+
+    /**
+     * @return string
+     */
+    public function getSignatureMethod()
+    {
+        return 'HMAC-SHA1';
+    }
+
+    /**
+     * @return string
+     */
+    public function getSignatureVersion()
+    {
+        return '1.0';
+    }
+
+    /**
+     * @return null
+     */
+    public function getSignatureType()
+    {
+        return null;
+    }
+}

+ 58 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Auth/ShaHmac256Signer.php

@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class ShaHmac256Signer implements ISigner
+{
+    /**
+     * @param $source
+     * @param $accessSecret
+     *
+     * @return string
+     */
+    public function signString($source, $accessSecret)
+    {
+        return base64_encode(hash_hmac('sha256', $source, $accessSecret, true));
+    }
+
+    /**
+     * @return string
+     */
+    public function getSignatureMethod()
+    {
+        return 'HMAC-SHA256';
+    }
+
+    /**
+     * @return string
+     */
+    public function getSignatureVersion()
+    {
+        return '1.0';
+    }
+
+    /**
+     * @return null
+     */
+    public function getSignatureType()
+    {
+        return null;
+    }
+}

+ 76 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Autoloader/Autoloader.php

@@ -0,0 +1,76 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+spl_autoload_register('Autoloader::autoload');
+
+class Autoloader
+{
+    /**
+     * @var array
+     */
+    private static $autoloadPathArray = array(
+        'aliyun-php-sdk-core',
+        'aliyun-php-sdk-core/Auth',
+        'aliyun-php-sdk-core/Http',
+        'aliyun-php-sdk-core/Profile',
+        'aliyun-php-sdk-core/Regions',
+        'aliyun-php-sdk-core/Exception',
+    );
+
+    /**
+     * Automatically find the class and load it.
+     *
+     * @param string $className
+     */
+    public static function autoload($className)
+    {
+        $directories = dirname(dirname(__DIR__));
+        foreach (self::$autoloadPathArray as $path) {
+            $file = $directories . DIRECTORY_SEPARATOR . $path . DIRECTORY_SEPARATOR . $className . '.php';
+            $file = str_replace('\\', DIRECTORY_SEPARATOR, $file);
+            if (is_file($file)) {
+                include_once $file;
+                break;
+            }
+        }
+    }
+
+    /**
+     * Load all product folders.
+     *
+     * @return void
+     */
+    public static function loadDirectories()
+    {
+        $directories = dirname(dirname(__DIR__));
+        foreach (glob($directories . DIRECTORY_SEPARATOR . '*') as $directory) {
+            if (is_dir($directory) && basename($directory) !== 'aliyun-php-sdk-core') {
+                self::$autoloadPathArray[] = basename($directory);
+            }
+        }
+    }
+
+    /**
+     * @param string $path
+     */
+    public static function addAutoloadPath($path)
+    {
+        self::$autoloadPathArray[] = $path;
+    }
+}

+ 85 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/ChangeLog.txt

@@ -0,0 +1,85 @@
+2019-03-04 Version: 1.3.9
+1, Support CCC.
+
+2019-02-25 Version: 1.3.8
+1, Fixed SignatureDoesNotMatch.
+
+2019-01-11 Version: 1.3.7
+1, Support sign for Windows.
+
+2019-01-04 Version: 1.3.6
+1, add endpoints for Iot.
+
+2019-01-03 Version: 1.3.5
+1, Regenerate cdn.
+
+2019-01-01 Version: 1.3.4
+1, use DIRECTORY_SEPARATOR.
+
+2018-12-31 Version: 1.3.3
+1, Optimized autoload.
+
+2018-12-29 Version: 1.3.2
+1, Support autoload directories.
+
+2018-12-29 Version: 1.3.1
+1, Fixed invalid released.
+
+2018-12-29 Version: 1.3.0
+1, fixed method for ROA request.
+
+2018-12-29 Version: 1.2.9
+1, Support magic method call for get request parameters.
+
+2018-12-28 Version: 1.2.8
+1, Format core code.
+
+2018-12-27 Version: 1.2.7
+1, Fixed protocolType conflict.
+
+2018-12-27 Version: 1.2.6
+1, Support BssOpenApi product.
+
+2018-12-27 Version: 1.2.5
+1, Support Afs product.
+
+2018-12-27 Version: 1.2.4
+1, Fixed isset domain in LocationService
+
+2018-12-27 Version: 1.2.3
+1, Add the aliyun dns class load path.
+2, Fixed PHP Notice in LocationService.php.
+
+2018-12-24 Version: 1.2.2
+1, Fixed ROA sign
+2, ROA support JSON Format
+3, Response Field identification
+
+
+2018-12-11 Version: 1.2.1
+1, Add endpoint data for DYSMS
+
+2018-11-06 Version: 1.2.1
+1, fix Notice for LocationService::checkCacheIsExpire
+
+2018-11-06 Version: 1.2.1
+1, fix Notice for LocationService::checkCacheIsExpire
+
+2018-11-06 Version: 1.2.1
+1, fix Notice for LocationService::checkCacheIsExpire
+
+2018-03-13 Version: 1.1.4
+1, Three scene completion StsToken
+
+2017-12-22 Version: 1.2.0
+1, STS token that supports ordinary scenes.
+
+2017-09-30 Version: 1.1.3
+1, fix bug:修改客户端默认时区
+
+2017-09-06 Version: 1.1.4
+1, 修改IoT套件美西和新加坡节点的endpoint
+
+2017-07-25 Version: 1.1.3
+1, 修改IoT套件在华东2个Region上的endpoint。
+

+ 36 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Config.php

@@ -0,0 +1,36 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once 'Autoloader/Autoloader.php';
+include_once 'Regions/EndpointConfig.php';
+include_once 'Regions/LocationService.php';
+Autoloader::loadDirectories();
+//config http proxy
+/**
+ *
+ */
+define('ENABLE_HTTP_PROXY', false);
+/**
+ *
+ */
+define('HTTP_PROXY_IP', '127.0.0.1');
+/**
+ *
+ */
+define('HTTP_PROXY_PORT', '8888');

+ 278 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/DefaultAcsClient.php

@@ -0,0 +1,278 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class DefaultAcsClient implements IAcsClient
+{
+    /**
+     * @var IClientProfile
+     */
+    public $iClientProfile;
+    /**
+     * @var bool
+     */
+    public $__urlTestFlag__;
+    /**
+     * @var LocationService
+     */
+    private $locationService;
+    /**
+     * @var RamRoleArnService
+     */
+    private $ramRoleArnService;
+    /**
+     * @var EcsRamRoleService
+     */
+    private $ecsRamRoleService;
+
+    /**
+     * DefaultAcsClient constructor.
+     *
+     * @param $iClientProfile
+     */
+    public function __construct($iClientProfile)
+    {
+        $this->iClientProfile  = $iClientProfile;
+        $this->__urlTestFlag__ = false;
+        $this->locationService = new LocationService($this->iClientProfile);
+        if ($this->iClientProfile->isRamRoleArn()) {
+            $this->ramRoleArnService = new RamRoleArnService($this->iClientProfile);
+        }
+        if ($this->iClientProfile->isEcsRamRole()) {
+            $this->ecsRamRoleService = new EcsRamRoleService($this->iClientProfile);
+        }
+    }
+
+    /**
+     * @param      $request
+     * @param null $iSigner
+     * @param null $credential
+     * @param bool $autoRetry
+     * @param int  $maxRetryNumber
+     *
+     * @return mixed|SimpleXMLElement
+     * @throws ClientException
+     * @throws ServerException
+     */
+    public function getAcsResponse($request,
+                                   $iSigner = null,
+                                   $credential = null,
+                                   $autoRetry = true,
+                                   $maxRetryNumber = 3)
+    {
+        $httpResponse = $this->doActionImpl($request, $iSigner, $credential, $autoRetry, $maxRetryNumber);
+        $respObject   = $this->parseAcsResponse($httpResponse->getBody(), $request->getAcceptFormat());
+        if (false === $httpResponse->isSuccess()) {
+            $this->buildApiException($respObject, $httpResponse->getStatus(), $request);
+        }
+        return $respObject;
+    }
+
+    /**
+     * @param AcsRequest $request
+     * @param null       $iSigner
+     * @param null       $credential
+     * @param bool       $autoRetry
+     * @param int        $maxRetryNumber
+     *
+     * @return HttpResponse
+     * @throws ClientException
+     */
+    private function doActionImpl($request, $iSigner = null, $credential = null, $autoRetry = true, $maxRetryNumber = 3)
+    {
+        if (null == $this->iClientProfile
+            && (null == $iSigner || null == $credential
+                || null == $request->getRegionId()
+                || null == $request->getAcceptFormat())) {
+            throw new ClientException('No active profile found.', 'SDK.InvalidProfile');
+        }
+        if (null == $iSigner) {
+            $iSigner = $this->iClientProfile->getSigner();
+        }
+        if (null == $credential) {
+            $credential = $this->iClientProfile->getCredential();
+        }
+        if ($this->iClientProfile->isRamRoleArn()) {
+            $credential = $this->ramRoleArnService->getSessionCredential();
+        }
+        if ($this->iClientProfile->isEcsRamRole()) {
+            $credential = $this->ecsRamRoleService->getSessionCredential();
+        }
+        if (null == $credential) {
+            throw new ClientException('Incorrect user credentials.', 'SDK.InvalidCredential');
+        }
+
+        $request = $this->prepareRequest($request);
+
+        // Get the domain from the Location Service by speicified `ServiceCode` and `RegionId`.
+        $domain = null;
+        if (null != $request->getLocationServiceCode()) {
+            $domain =
+                $this->locationService->findProductDomain($request->getRegionId(),
+                                                          $request->getLocationServiceCode(),
+                                                          $request->getLocationEndpointType(),
+                                                          $request->getProduct());
+        }
+        if ($domain == null) {
+            $domain = EndpointProvider::findProductDomain($request->getRegionId(), $request->getProduct());
+        }
+
+        if (null == $domain) {
+            throw new ClientException('Can not find endpoint to access.', 'SDK.InvalidRegionId');
+        }
+        $requestUrl = $request->composeUrl($iSigner, $credential, $domain);
+
+        if ($this->__urlTestFlag__) {
+            throw new ClientException($requestUrl, 'URLTestFlagIsSet');
+        }
+
+        if (count($request->getDomainParameter()) > 0) {
+            $httpResponse =
+                HttpHelper::curl($requestUrl,
+                                 $request->getMethod(),
+                                 $request->getDomainParameter(),
+                                 $request->getHeaders());
+        } else {
+            $httpResponse =
+                HttpHelper::curl($requestUrl, $request->getMethod(), $request->getContent(), $request->getHeaders());
+        }
+
+        $retryTimes = 1;
+        while (500 <= $httpResponse->getStatus() && $autoRetry && $retryTimes < $maxRetryNumber) {
+            $requestUrl = $request->composeUrl($iSigner, $credential, $domain);
+
+            if (count($request->getDomainParameter()) > 0) {
+                $httpResponse =
+                    HttpHelper::curl($requestUrl,
+                                     $request->getMethod(),
+                                     $request->getDomainParameter(),
+                                     $request->getHeaders());
+            } else {
+                $httpResponse =
+                    HttpHelper::curl($requestUrl,
+                                     $request->getMethod(),
+                                     $request->getContent(),
+                                     $request->getHeaders());
+            }
+            $retryTimes++;
+        }
+        return $httpResponse;
+    }
+
+    /**
+     * @param AcsRequest $request
+     * @param null       $iSigner
+     * @param null       $credential
+     * @param bool       $autoRetry
+     * @param int        $maxRetryNumber
+     *
+     * @return HttpResponse|mixed
+     * @throws ClientException
+     */
+    public function doAction($request, $iSigner = null, $credential = null, $autoRetry = true, $maxRetryNumber = 3)
+    {
+        trigger_error('doAction() is deprecated. Please use getAcsResponse() instead.', E_USER_NOTICE);
+        return $this->doActionImpl($request, $iSigner, $credential, $autoRetry, $maxRetryNumber);
+    }
+
+    /**
+     * @param $request
+     *
+     * @return mixed
+     */
+    private function prepareRequest($request)
+    {
+        if (null == $request->getRegionId()) {
+            $request->setRegionId($this->iClientProfile->getRegionId());
+        }
+        if (null == $request->getAcceptFormat()) {
+            $request->setAcceptFormat($this->iClientProfile->getFormat());
+        }
+        if (null == $request->getMethod()) {
+            $request->setMethod('GET');
+        }
+        return $request;
+    }
+
+    /**
+     * @param object     $respObject
+     * @param int        $httpStatus
+     *
+     * @param AcsRequest $request
+     *
+     * @throws ServerException
+     */
+    private function buildApiException($respObject, $httpStatus, AcsRequest $request)
+    {
+        $errorCode    = 'UnknownServerError';
+        $errorMessage = 'The server returned an error without a detailed message. ';
+        $requestId    = 'None';
+
+        // Compatible with different results
+        if (isset($respObject->Message, $respObject->Code, $respObject->RequestId)) {
+            $errorCode    = $respObject->Code;
+            $errorMessage = $respObject->Message;
+            $requestId    = $respObject->RequestId;
+        }
+
+        if (isset($respObject->message, $respObject->code, $respObject->requestId)) {
+            $errorCode    = $respObject->code;
+            $errorMessage = $respObject->message;
+            $requestId    = $respObject->requestId;
+        }
+
+        if (isset($respObject->errorMsg, $respObject->errorCode)) {
+            $errorCode    = $respObject->errorCode;
+            $errorMessage = $respObject->errorMsg;
+        }
+
+        if ($httpStatus === 400 && $errorCode === 'SignatureDoesNotMatch'
+            && strpos($errorMessage,
+                      $request->stringToBeSigned()) !== false) {
+            $errorCode    = 'InvalidAccessKeySecret';
+            $errorMessage = 'Specified Access Key Secret is not valid.';
+        }
+
+        throw new ServerException(
+            $errorMessage,
+            $errorCode,
+            $httpStatus,
+            $requestId
+        );
+    }
+
+    /**
+     * @param $body
+     * @param $format
+     *
+     * @return mixed|SimpleXMLElement
+     */
+    private function parseAcsResponse($body, $format)
+    {
+        if ('JSON' === $format) {
+            $respObject = json_decode($body);
+        } elseif ('XML' === $format) {
+            $respObject = @simplexml_load_string($body);
+        } elseif ('RAW' === $format) {
+            $respObject = $body;
+        }
+        return $respObject;
+    }
+}

+ 98 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Exception/ClientException.php

@@ -0,0 +1,98 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class ClientException extends Exception
+{
+    /**
+     * @var string
+     */
+    private $errorCode;
+    /**
+     * @var string
+     */
+    private $errorMessage;
+    /**
+     * @var string
+     */
+    private $errorType;
+
+    /**
+     * ClientException constructor.
+     *
+     * @param $errorMessage
+     * @param $errorCode
+     */
+    public function __construct($errorMessage, $errorCode)
+    {
+        parent::__construct($errorMessage);
+        $this->errorMessage = $errorMessage;
+        $this->errorCode    = $errorCode;
+        $this->setErrorType('Client');
+    }
+
+    /**
+     * @return string
+     */
+    public function getErrorCode()
+    {
+        return $this->errorCode;
+    }
+
+    /**
+     * @param $errorCode
+     */
+    public function setErrorCode($errorCode)
+    {
+        $this->errorCode = $errorCode;
+    }
+
+    /**
+     * @return string
+     */
+    public function getErrorMessage()
+    {
+        return $this->errorMessage;
+    }
+
+    /**
+     * @param $errorMessage
+     */
+    public function setErrorMessage($errorMessage)
+    {
+        $this->errorMessage = $errorMessage;
+    }
+
+    /**
+     * @return string
+     */
+    public function getErrorType()
+    {
+        return $this->errorType;
+    }
+
+    /**
+     * @param $errorType
+     */
+    public function setErrorType($errorType)
+    {
+        $this->errorType = $errorType;
+    }
+}

+ 66 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Exception/ServerException.php

@@ -0,0 +1,66 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class ServerException extends ClientException
+{
+    /**
+     * @var string
+     */
+    private $httpStatus;
+    /**
+     * @var string
+     */
+    private $requestId;
+
+    /**
+     * ServerException constructor.
+     *
+     * @param $errorMessage
+     * @param $errorCode
+     * @param $httpStatus
+     * @param $requestId
+     */
+    public function __construct($errorMessage, $errorCode, $httpStatus, $requestId)
+    {
+        $messageStr = $errorCode . ' ' . $errorMessage . ' HTTP Status: ' . $httpStatus . ' RequestID: ' . $requestId;
+        parent::__construct($messageStr, $errorCode);
+        $this->setErrorMessage($errorMessage);
+        $this->setErrorType('Server');
+        $this->httpStatus = $httpStatus;
+        $this->requestId  = $requestId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getHttpStatus()
+    {
+        return $this->httpStatus;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRequestId()
+    {
+        return $this->requestId;
+    }
+}

+ 110 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Http/HttpHelper.php

@@ -0,0 +1,110 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class HttpHelper
+{
+    /**
+     * @var int
+     */
+    public static $connectTimeout = 30;//30 second
+    /**
+     * @var int
+     */
+    public static $readTimeout = 80;//80 second
+
+    /**
+     * @param string $url
+     * @param string $httpMethod
+     * @param null   $postFields
+     * @param null   $headers
+     *
+     * @return HttpResponse
+     * @throws ClientException
+     */
+    public static function curl($url, $httpMethod = 'GET', $postFields = null, $headers = null)
+    {
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $httpMethod);
+        if (ENABLE_HTTP_PROXY) {
+            curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
+            curl_setopt($ch, CURLOPT_PROXY, HTTP_PROXY_IP);
+            curl_setopt($ch, CURLOPT_PROXYPORT, HTTP_PROXY_PORT);
+            curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+        }
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_FAILONERROR, false);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($postFields) ? self::getPostHttpBody($postFields) : $postFields);
+
+        if (self::$readTimeout) {
+            curl_setopt($ch, CURLOPT_TIMEOUT, self::$readTimeout);
+        }
+        if (self::$connectTimeout) {
+            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$connectTimeout);
+        }
+        //https request
+        if (strlen($url) > 5 && stripos($url, 'https') === 0) {
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+        }
+        if (is_array($headers) && 0 < count($headers)) {
+            $httpHeaders = self::getHttpHearders($headers);
+            curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders);
+        }
+        $httpResponse = new HttpResponse();
+        $httpResponse->setBody(curl_exec($ch));
+        $httpResponse->setStatus(curl_getinfo($ch, CURLINFO_HTTP_CODE));
+        if (curl_errno($ch)) {
+            throw new ClientException('Server unreachable: Errno: ' . curl_errno($ch) . ' ' . curl_error($ch),
+                                      'SDK.ServerUnreachable');
+        }
+        curl_close($ch);
+        return $httpResponse;
+    }
+
+    /**
+     * @param $postFildes
+     *
+     * @return bool|string
+     */
+    public static function getPostHttpBody($postFildes)
+    {
+        $content = '';
+        foreach ($postFildes as $apiParamKey => $apiParamValue) {
+            $content .= "$apiParamKey=" . urlencode($apiParamValue) . '&';
+        }
+        return substr($content, 0, -1);
+    }
+
+    /**
+     * @param $headers
+     *
+     * @return array
+     */
+    public static function getHttpHearders($headers)
+    {
+        $httpHeader = array();
+        foreach ($headers as $key => $value) {
+            $httpHeader[] = $key . ':' . $value;
+        }
+        return $httpHeader;
+    }
+}

+ 72 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Http/HttpResponse.php

@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class HttpResponse
+{
+    /**
+     * @var string
+     */
+    private $body;
+    /**
+     * @var string
+     */
+    private $status;
+
+    /**
+     * @return string
+     */
+    public function getBody()
+    {
+        return $this->body;
+    }
+
+    /**
+     * @param $body
+     */
+    public function setBody($body)
+    {
+        $this->body = $body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getStatus()
+    {
+        return $this->status;
+    }
+
+    /**
+     * @param $status
+     */
+    public function setStatus($status)
+    {
+        $this->status = $status;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isSuccess()
+    {
+        return 200 <= $this->status && 300 > $this->status;
+    }
+}

+ 30 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/IAcsClient.php

@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+interface IAcsClient
+{
+    /**
+     * @param AcsRequest $request
+     *
+     * @return mixed
+     */
+    public function doAction($request);
+}

+ 300 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Profile/DefaultProfile.php

@@ -0,0 +1,300 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ */
+define('AUTH_TYPE_RAM_AK', 'RAM_AK');
+/**
+ *
+ */
+define('AUTH_TYPE_RAM_ROLE_ARN', 'RAM_ROLE_ARN');
+/**
+ *
+ */
+define('AUTH_TYPE_ECS_RAM_ROLE', 'ECS_RAM_ROLE');
+/**
+ *
+ */
+define('AUTH_TYPE_BEARER_TOKEN', 'BEARER_TOKEN');
+
+class DefaultProfile implements IClientProfile
+{
+    /**
+     * @var IClientProfile
+     */
+    private static $profile;
+    /**
+     * @var array
+     */
+    private static $endpoints;
+    /**
+     * @var AbstractCredential
+     */
+    private static $credential;
+    /**
+     * @var string
+     */
+    private static $regionId;
+    /**
+     * @var string
+     */
+    private static $acceptFormat;
+    /**
+     * @var string
+     */
+    private static $authType;
+
+    /**
+     * @var ISigner
+     */
+    private static $isigner;
+    /**
+     * @var AbstractCredential
+     */
+    private static $iCredential;
+
+    /**
+     * DefaultProfile constructor.
+     *
+     * @param        $regionId
+     * @param        $credential
+     * @param string $authType
+     * @param null   $isigner
+     */
+    private function __construct($regionId, $credential, $authType = AUTH_TYPE_RAM_AK, $isigner = null)
+    {
+        self::$regionId   = $regionId;
+        self::$credential = $credential;
+        self::$authType   = $authType;
+        self::$isigner    = $isigner;
+    }
+
+    /**
+     * @param      $regionId
+     * @param      $accessKeyId
+     * @param      $accessSecret
+     * @param null $securityToken
+     *
+     * @return DefaultProfile|IClientProfile
+     */
+    public static function getProfile($regionId, $accessKeyId, $accessSecret, $securityToken = null)
+    {
+        $credential    = new Credential($accessKeyId, $accessSecret, $securityToken);
+        self::$profile = new DefaultProfile($regionId, $credential);
+        return self::$profile;
+    }
+
+    /**
+     * @param $regionId
+     * @param $accessKeyId
+     * @param $accessSecret
+     * @param $roleArn
+     * @param $roleSessionName
+     *
+     * @return DefaultProfile|IClientProfile
+     */
+    public static function getRamRoleArnProfile($regionId, $accessKeyId, $accessSecret, $roleArn, $roleSessionName)
+    {
+        $credential    = new RamRoleArnCredential($accessKeyId, $accessSecret, $roleArn, $roleSessionName);
+        self::$profile = new DefaultProfile($regionId, $credential, AUTH_TYPE_RAM_ROLE_ARN);
+        return self::$profile;
+    }
+
+    /**
+     * @param $regionId
+     * @param $roleName
+     *
+     * @return DefaultProfile|IClientProfile
+     */
+    public static function getEcsRamRoleProfile($regionId, $roleName)
+    {
+        $credential    = new EcsRamRoleCredential($roleName);
+        self::$profile = new DefaultProfile($regionId, $credential, AUTH_TYPE_ECS_RAM_ROLE);
+        return self::$profile;
+    }
+
+    /**
+     * @param $regionId
+     * @param $bearerToken
+     *
+     * @return DefaultProfile|IClientProfile
+     */
+    public static function getBearerTokenProfile($regionId, $bearerToken)
+    {
+        $credential    = new BearerTokenCredential($bearerToken);
+        self::$profile = new DefaultProfile($regionId, $credential, AUTH_TYPE_BEARER_TOKEN, new BearTokenSigner());
+        return self::$profile;
+    }
+
+    /**
+     * @return ISigner|ShaHmac1Signer|null
+     */
+    public function getSigner()
+    {
+        if (null == self::$isigner) {
+            self::$isigner = new ShaHmac1Signer();
+        }
+        return self::$isigner;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRegionId()
+    {
+        return self::$regionId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getFormat()
+    {
+        return self::$acceptFormat;
+    }
+
+    /**
+     * @return AbstractCredential
+     */
+    public function getCredential()
+    {
+        if (null == self::$credential && null != self::$iCredential) {
+            self::$credential = self::$iCredential;
+        }
+        return self::$credential;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isRamRoleArn()
+    {
+        return self::$authType == AUTH_TYPE_RAM_ROLE_ARN;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isEcsRamRole()
+    {
+        return self::$authType == AUTH_TYPE_ECS_RAM_ROLE;
+    }
+
+    /**
+     * @return array
+     */
+    public static function getEndpoints()
+    {
+        if (null == self::$endpoints) {
+            self::$endpoints = EndpointProvider::getEndpoints();
+        }
+        return self::$endpoints;
+    }
+
+    /**
+     * @param $endpointName
+     * @param $regionId
+     * @param $product
+     * @param $domain
+     */
+    public static function addEndpoint($endpointName, $regionId, $product, $domain)
+    {
+        if (null == self::$endpoints) {
+            self::$endpoints = self::getEndpoints();
+        }
+        $endpoint = self::findEndpointByName($endpointName);
+        if (null == $endpoint) {
+            self::addEndpoint_($endpointName, $regionId, $product, $domain);
+        } else {
+            self::updateEndpoint($regionId, $product, $domain, $endpoint);
+        }
+
+        LocationService::addEndPoint($regionId, $product, $domain);
+    }
+
+    /**
+     * @param $endpointName
+     *
+     * @return mixed
+     */
+    public static function findEndpointByName($endpointName)
+    {
+        foreach (self::$endpoints as $key => $endpoint) {
+            if ($endpoint->getName() == $endpointName) {
+                return $endpoint;
+            }
+        }
+    }
+
+    /**
+     * @param $endpointName
+     * @param $regionId
+     * @param $product
+     * @param $domain
+     */
+    private static function addEndpoint_($endpointName, $regionId, $product, $domain)
+    {
+        $regionIds         = array($regionId);
+        $productsDomains   = array(new ProductDomain($product, $domain));
+        $endpoint          = new Endpoint($endpointName, $regionIds, $productsDomains);
+        self::$endpoints[] = $endpoint;
+    }
+
+    /**
+     * @param string   $regionId
+     * @param string   $product
+     * @param string   $domain
+     * @param Endpoint $endpoint
+     */
+    private static function updateEndpoint($regionId, $product, $domain, $endpoint)
+    {
+        $regionIds = $endpoint->getRegionIds();
+        if (!in_array($regionId, $regionIds)) {
+            $regionIds[] = $regionId;
+            $endpoint->setRegionIds($regionIds);
+        }
+
+        $productDomains = $endpoint->getProductDomains();
+        if (null == self::findProductDomainAndUpdate($productDomains, $product, $domain)) {
+            $productDomains[] = new ProductDomain($product, $domain);
+        }
+
+        $endpoint->setProductDomains($productDomains);
+    }
+
+    /**
+     * @param $productDomains
+     * @param $product
+     * @param $domain
+     *
+     * @return string|null
+     */
+    private static function findProductDomainAndUpdate($productDomains, $product, $domain)
+    {
+        foreach ($productDomains as $key => $productDomain) {
+            if ($productDomain->getProductName() == $product) {
+                $productDomain->setDomainName($domain);
+                return $productDomain;
+            }
+        }
+        return null;
+    }
+}

+ 35 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Profile/IClientProfile.php

@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+interface IClientProfile
+{
+    public function getSigner();
+
+    public function getRegionId();
+
+    public function getFormat();
+
+    public function getCredential();
+
+    public function isRamRoleArn();
+
+    public function isEcsRamRole();
+}

+ 98 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Regions/Endpoint.php

@@ -0,0 +1,98 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Endpoint
+{
+    /**
+     * @var string
+     */
+    private $name;
+    /**
+     * @var string
+     */
+    private $regionIds;
+    /**
+     * @var string
+     */
+    private $productDomains;
+
+    /**
+     * Endpoint constructor.
+     *
+     * @param $name
+     * @param $regionIds
+     * @param $productDomains
+     */
+    public function __construct($name, $regionIds, $productDomains)
+    {
+        $this->name           = $name;
+        $this->regionIds      = $regionIds;
+        $this->productDomains = $productDomains;
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * @param $name
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRegionIds()
+    {
+        return $this->regionIds;
+    }
+
+    /**
+     * @param $regionIds
+     */
+    public function setRegionIds($regionIds)
+    {
+        $this->regionIds = $regionIds;
+    }
+
+    /**
+     * @return string
+     */
+    public function getProductDomains()
+    {
+        return $this->productDomains;
+    }
+
+    /**
+     * @param $productDomains
+     */
+    public function setProductDomains($productDomains)
+    {
+        $this->productDomains = $productDomains;
+    }
+}

+ 65 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Regions/EndpointConfig.php

@@ -0,0 +1,65 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+$endpoint_filename = __DIR__ . DIRECTORY_SEPARATOR . 'endpoints.xml';
+$xml               = simplexml_load_string(file_get_contents($endpoint_filename));
+$json              = json_encode($xml);
+$json_array        = json_decode($json, true);
+
+$endpoints = array();
+
+foreach ($json_array['Endpoint'] as $json_endpoint) {
+    # pre-process RegionId & Product
+    if (!array_key_exists('RegionId', $json_endpoint['RegionIds'])) {
+        $region_ids = array();
+    } else {
+        $json_region_ids = $json_endpoint['RegionIds']['RegionId'];
+        if (!is_array($json_region_ids)) {
+            $region_ids = array($json_region_ids);
+        } else {
+            $region_ids = $json_region_ids;
+        }
+    }
+
+    if (!array_key_exists('Product', $json_endpoint['Products'])) {
+        $products = array();
+    } else {
+        $json_products = $json_endpoint['Products']['Product'];
+
+        if (array() === $json_products || !is_array($json_products)) {
+            $products = array();
+        } elseif (array_keys($json_products) !== range(0, count($json_products) - 1)) {
+            # array is not sequential
+            $products = array($json_products);
+        } else {
+            $products = $json_products;
+        }
+    }
+
+    $product_domains = array();
+    foreach ($products as $product) {
+        $product_domain    = new ProductDomain($product['ProductName'], $product['DomainName']);
+        $product_domains[] = $product_domain;
+    }
+
+    $endpoint    = new Endpoint($region_ids[0], $region_ids, $product_domains);
+    $endpoints[] = $endpoint;
+}
+
+EndpointProvider::setEndpoints($endpoints);

+ 82 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Regions/EndpointProvider.php

@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class EndpointProvider
+{
+    /**
+     * @var array
+     */
+    private static $endpoints;
+
+    /**
+     * @param $regionId
+     * @param $product
+     *
+     * @return null
+     */
+    public static function findProductDomain($regionId, $product)
+    {
+        if (null == $regionId || null == $product || null == self::$endpoints) {
+            return null;
+        }
+        foreach (self::$endpoints as $key => $endpoint) {
+            if (in_array($regionId, $endpoint->getRegionIds())) {
+                return self::findProductDomainByProduct($endpoint->getProductDomains(), $product);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param $productDomains
+     * @param $product
+     *
+     * @return null
+     */
+    private static function findProductDomainByProduct($productDomains, $product)
+    {
+        if (null == $productDomains) {
+            return null;
+        }
+        foreach ($productDomains as $key => $productDomain) {
+            if ($product == $productDomain->getProductName()) {
+                return $productDomain->getDomainName();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @return array
+     */
+    public static function getEndpoints()
+    {
+        return self::$endpoints;
+    }
+
+    /**
+     * @param $endpoints
+     */
+    public static function setEndpoints($endpoints)
+    {
+        self::$endpoints = $endpoints;
+    }
+}

+ 194 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Regions/LocationService.php

@@ -0,0 +1,194 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ */
+define('LOCATION_SERVICE_PRODUCT_NAME', 'Location');
+/**
+ *
+ */
+define('LOCATION_SERVICE_DOMAIN', 'location.aliyuncs.com');
+/**
+ *
+ */
+define('LOCATION_SERVICE_VERSION', '2015-06-12');
+/**
+ *
+ */
+define('LOCATION_SERVICE_DESCRIBE_ENDPOINT_ACTION', 'DescribeEndpoints');
+/**
+ *
+ */
+define('LOCATION_SERVICE_REGION', 'cn-hangzhou');
+/**
+ *
+ */
+define('CACHE_EXPIRE_TIME', 3600);
+
+class DescribeEndpointRequest extends RpcAcsRequest
+{
+    /**
+     * DescribeEndpointRequest constructor.
+     *
+     * @param $id
+     * @param $serviceCode
+     * @param $endPointType
+     */
+    public function __construct($id, $serviceCode, $endPointType)
+    {
+        parent::__construct(LOCATION_SERVICE_PRODUCT_NAME,
+                            LOCATION_SERVICE_VERSION,
+                            LOCATION_SERVICE_DESCRIBE_ENDPOINT_ACTION);
+
+        $this->queryParameters['Id']          = $id;
+        $this->queryParameters['ServiceCode'] = $serviceCode;
+        $this->queryParameters['Type']        = $endPointType;
+        $this->setRegionId(LOCATION_SERVICE_REGION);
+
+        $this->setAcceptFormat('JSON');
+    }
+}
+
+class LocationService
+{
+    /**
+     * @var IClientProfile
+     */
+    private $clientProfile;
+    /**
+     * @var array
+     */
+    public static $cache = array();
+    /**
+     * @var array
+     */
+    public static $lastClearTimePerProduct = array();
+    /**
+     * @var string
+     */
+    public static $serviceDomain = LOCATION_SERVICE_DOMAIN;
+
+    /**
+     * LocationService constructor.
+     *
+     * @param $clientProfile
+     */
+    public function __construct($clientProfile)
+    {
+        $this->clientProfile = $clientProfile;
+    }
+
+    /**
+     * @param $regionId
+     * @param $serviceCode
+     * @param $endPointType
+     * @param $product
+     *
+     * @return mixed|null
+     * @throws ClientException
+     */
+    public function findProductDomain($regionId, $serviceCode, $endPointType, $product)
+    {
+        $key    = $regionId . '#' . $product;
+        $domain = isset(self::$cache[$key]) ? self::$cache[$key] : null;
+        if ($domain === null || $this->checkCacheIsExpire($key) == true) {
+            $domain            = $this->findProductDomainFromLocationService($regionId, $serviceCode, $endPointType);
+            self::$cache[$key] = $domain;
+        }
+
+        return $domain;
+    }
+
+    /**
+     * @param $regionId
+     * @param $product
+     * @param $domain
+     */
+    public static function addEndPoint($regionId, $product, $domain)
+    {
+        $key                                 = $regionId . '#' . $product;
+        self::$cache[$key]                   = $domain;
+        $lastClearTime                       = mktime(0, 0, 0, 1, 1, 2999);
+        self::$lastClearTimePerProduct[$key] = $lastClearTime;
+    }
+
+    /**
+     * @param $domain
+     */
+    public static function modifyServiceDomain($domain)
+    {
+        self::$serviceDomain = $domain;
+    }
+
+    /**
+     * @param $key
+     *
+     * @return bool
+     */
+    private function checkCacheIsExpire($key)
+    {
+        $lastClearTime = isset(self::$lastClearTimePerProduct[$key])
+            ? self::$lastClearTimePerProduct[$key]
+            : null;
+        if ($lastClearTime === null) {
+            $lastClearTime                       = time();
+            self::$lastClearTimePerProduct[$key] = $lastClearTime;
+        }
+
+        $now         = time();
+        $elapsedTime = $now - $lastClearTime;
+
+        if ($elapsedTime > CACHE_EXPIRE_TIME) {
+            $lastClearTime                       = time();
+            self::$lastClearTimePerProduct[$key] = $lastClearTime;
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * @param $regionId
+     * @param $serviceCode
+     * @param $endPointType
+     *
+     * @return string|null
+     * @throws ClientException
+     */
+    private function findProductDomainFromLocationService($regionId, $serviceCode, $endPointType)
+    {
+        $request = new DescribeEndpointRequest($regionId, $serviceCode, $endPointType);
+
+        $signer     = $this->clientProfile->getSigner();
+        $credential = $this->clientProfile->getCredential();
+
+        $requestUrl = $request->composeUrl($signer, $credential, self::$serviceDomain);
+
+        $httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), null, $request->getHeaders());
+
+        if (!$httpResponse->isSuccess()) {
+            return null;
+        }
+
+        $respObj = json_decode($httpResponse->getBody());
+        return $respObj->Endpoints->Endpoint[0]->Endpoint;
+    }
+}

+ 76 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Regions/ProductDomain.php

@@ -0,0 +1,76 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class ProductDomain
+{
+    /**
+     * @var string
+     */
+    private $productName;
+    /**
+     * @var string
+     */
+    private $domainName;
+
+    /**
+     * ProductDomain constructor.
+     *
+     * @param string $product
+     * @param string $domain
+     */
+    public function __construct($product, $domain)
+    {
+        $this->productName = $product;
+        $this->domainName  = $domain;
+    }
+
+    /**
+     * @return string
+     */
+    public function getProductName()
+    {
+        return $this->productName;
+    }
+
+    /**
+     * @param $productName
+     */
+    public function setProductName($productName)
+    {
+        $this->productName = $productName;
+    }
+
+    /**
+     * @return string
+     */
+    public function getDomainName()
+    {
+        return $this->domainName;
+    }
+
+    /**
+     * @param $domainName
+     */
+    public function setDomainName($domainName)
+    {
+        $this->domainName = $domainName;
+    }
+}

+ 4806 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/Regions/endpoints.xml

@@ -0,0 +1,4806 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Endpoints>
+    <Endpoint name="jp-fudao-1">
+        <RegionIds>
+            <RegionId>jp-fudao-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="me-east-1">
+        <RegionIds>
+            <RegionId>me-east-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.me-east-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs.me-east-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.me-east-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.me-east-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.me-east-1.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="us-east-1">
+        <RegionIds>
+            <RegionId>us-east-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.us-east-1.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-northeast-1">
+        <RegionIds>
+            <RegionId>ap-northeast-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kvstore</ProductName>
+                <DomainName>r-kvstore.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.ap-northeast-1.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou-bj-b01">
+        <RegionIds>
+            <RegionId>cn-hangzhou-bj-b01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hongkong">
+        <RegionIds>
+            <RegionId>cn-hongkong</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.cn-hongkong.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CloudAPI</ProductName>
+                <DomainName>apigateway.cn-hongkong.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-hongkong.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hongkong.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-nu16-b01">
+        <RegionIds>
+            <RegionId>cn-beijing-nu16-b01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-am13-c01">
+        <RegionIds>
+            <RegionId>cn-beijing-am13-c01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="in-west-antgroup-1">
+        <RegionIds>
+            <RegionId>in-west-antgroup-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-guizhou-gov">
+        <RegionIds>
+            <RegionId>cn-guizhou-gov</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="in-west-antgroup-2">
+        <RegionIds>
+            <RegionId>in-west-antgroup-2</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-qingdao-cm9">
+        <RegionIds>
+            <RegionId>cn-qingdao-cm9</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="tw-snowcloud-kaohsiung">
+        <RegionIds>
+            <RegionId>tw-snowcloud-kaohsiung</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai-finance-1">
+        <RegionIds>
+            <RegionId>cn-shanghai-finance-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.cn-shanghai-finance-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-guizhou">
+        <RegionIds>
+            <RegionId>cn-guizhou</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-qingdao-finance">
+        <RegionIds>
+            <RegionId>cn-qingdao-finance</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-qdjbp-a.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-gov-1">
+        <RegionIds>
+            <RegionId>cn-beijing-gov-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-haidian-a.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai">
+        <RegionIds>
+            <RegionId>cn-shanghai</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CCC</ProductName>
+                <DomainName>ccc.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>saf</ProductName>
+                <DomainName>saf.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ARMS</ProductName>
+                <DomainName>arms.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Apigateway</ProductName>
+                <DomainName>apigateway.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CloudAPI</ProductName>
+                <DomainName>apigateway.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>vod</ProductName>
+                <DomainName>vod.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-inner">
+        <RegionIds>
+            <RegionId>cn-shenzhen-inner</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-fujian">
+        <RegionIds>
+            <RegionId>cn-fujian</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="in-mumbai-alipay">
+        <RegionIds>
+            <RegionId>in-mumbai-alipay</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="us-west-1">
+        <RegionIds>
+            <RegionId>us-west-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.us-west-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.us-west-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-us-west-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai-inner">
+        <RegionIds>
+            <RegionId>cn-shanghai-inner</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-shanghai.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-anhui-gov-1">
+        <RegionIds>
+            <RegionId>cn-anhui-gov-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou-finance">
+        <RegionIds>
+            <RegionId>cn-hangzhou-finance</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hzjbp-b-console.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou">
+        <RegionIds>
+            <RegionId>cn-hangzhou</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>afs</ProductName>
+                <DomainName>afs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ARMS</ProductName>
+                <DomainName>arms.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Hpc</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Apigateway</ProductName>
+                <DomainName>apigateway.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CloudAPI</ProductName>
+                <DomainName>apigateway.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oas</ProductName>
+                <DomainName>cn-hangzhou.oas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dyvmsapi</ProductName>
+                <DomainName>dyvmsapi.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dysmsapi</ProductName>
+                <DomainName>dysmsapi.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dycdpapi</ProductName>
+                <DomainName>dycdpapi.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dyiotapi</ProductName>
+                <DomainName>dyiotapi.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dyplsapi</ProductName>
+                <DomainName>dyplsapi.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dypnsapi</ProductName>
+                <DomainName>dypnsapi.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Snsuapi</ProductName>
+                <DomainName>snsuapi.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-inner">
+        <RegionIds>
+            <RegionId>cn-beijing-inner</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-haidian-cm12-c01">
+        <RegionIds>
+            <RegionId>cn-haidian-cm12-c01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-anhui-gov">
+        <RegionIds>
+            <RegionId>cn-anhui-gov</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen">
+        <RegionIds>
+            <RegionId>cn-shenzhen</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>ARMS</ProductName>
+                <DomainName>arms.cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchcompute.cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Apigateway</ProductName>
+                <DomainName>apigateway.cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CloudAPI</ProductName>
+                <DomainName>apigateway.cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oas</ProductName>
+                <DomainName>cn-shenzhen.oas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-shenzhen.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-southeast-2">
+        <RegionIds>
+            <RegionId>ap-southeast-2</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.ap-southeast-2.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.ap-southeast-2.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.ap-southeast-2.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs.ap-southeast-2.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.ap-southeast-2.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-qingdao">
+        <RegionIds>
+            <RegionId>cn-qingdao</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchcompute.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Apigateway</ProductName>
+                <DomainName>apigateway.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CloudAPI</ProductName>
+                <DomainName>apigateway.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-qingdao.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-su18-b02">
+        <RegionIds>
+            <RegionId>cn-shenzhen-su18-b02</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-su18-b03">
+        <RegionIds>
+            <RegionId>cn-shenzhen-su18-b03</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-su18-b01">
+        <RegionIds>
+            <RegionId>cn-shenzhen-su18-b01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-southeast-antgroup-1">
+        <RegionIds>
+            <RegionId>ap-southeast-antgroup-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="oss-cn-bjzwy">
+        <RegionIds>
+            <RegionId>oss-cn-bjzwy</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-bjzwy.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-henan-am12001">
+        <RegionIds>
+            <RegionId>cn-henan-am12001</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing">
+        <RegionIds>
+            <RegionId>cn-beijing</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>ARMS</ProductName>
+                <DomainName>arms.cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oas</ProductName>
+                <DomainName>cn-beijing.oas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Hpc</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Apigateway</ProductName>
+                <DomainName>apigateway.cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CloudAPI</ProductName>
+                <DomainName>apigateway.cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>vod</ProductName>
+                <DomainName>vod.cn-beijing.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou-d">
+        <RegionIds>
+            <RegionId>cn-hangzhou-d</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-gansu-am6">
+        <RegionIds>
+            <RegionId>cn-gansu-am6</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-ningxiazhongwei">
+        <RegionIds>
+            <RegionId>cn-ningxiazhongwei</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai-et2-b01">
+        <RegionIds>
+            <RegionId>cn-shanghai-et2-b01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace-ops</ProductName>
+                <DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Acs</ProductName>
+                <DomainName>acs.aliyun-inc.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc-inner</ProductName>
+                <DomainName>vpc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-ningxia-am7-c01">
+        <RegionIds>
+            <RegionId>cn-ningxia-am7-c01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-finance-1">
+        <RegionIds>
+            <RegionId>cn-shenzhen-finance-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.cn-shenzhen-finance-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-southeast-1">
+        <RegionIds>
+            <RegionId>ap-southeast-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>CS</ProductName>
+                <DomainName>cs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Risk</ProductName>
+                <DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>COS</ProductName>
+                <DomainName>cos.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ess</ProductName>
+                <DomainName>ess.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Billing</ProductName>
+                <DomainName>billing.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dqs</ProductName>
+                <DomainName>dqs.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dds</ProductName>
+                <DomainName>mongodb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alidns</ProductName>
+                <DomainName>alidns.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sms</ProductName>
+                <DomainName>sms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drds</ProductName>
+                <DomainName>drds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dts</ProductName>
+                <DomainName>dts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.ap-southeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location</ProductName>
+                <DomainName>location.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msg</ProductName>
+                <DomainName>msg-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ChargingService</ProductName>
+                <DomainName>chargingservice.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>R-kvstore</ProductName>
+                <DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Alert</ProductName>
+                <DomainName>alert.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Msc</ProductName>
+                <DomainName>msc-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HighDDos</ProductName>
+                <DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundun</ProductName>
+                <DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms-inner</ProductName>
+                <DomainName>ubsms-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ocs</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dm</ProductName>
+                <DomainName>dm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Green</ProductName>
+                <DomainName>green.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Commondriver</ProductName>
+                <DomainName>common.driver.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>oceanbase</ProductName>
+                <DomainName>oceanbase.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Workorder</ProductName>
+                <DomainName>workorder.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Yundunhsm</ProductName>
+                <DomainName>yundunhsm.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.ap-southeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>HPC</ProductName>
+                <DomainName>hpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>jaq</ProductName>
+                <DomainName>jaq.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oms</ProductName>
+                <DomainName>oms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>live</ProductName>
+                <DomainName>live.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>M-kvstore</ProductName>
+                <DomainName>m-kvstore.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>BatchCompute</ProductName>
+                <DomainName>batchCompute.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>AMS</ProductName>
+                <DomainName>ams.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>ROS</ProductName>
+                <DomainName>ros.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>PTS</ProductName>
+                <DomainName>pts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Qualitycheck</ProductName>
+                <DomainName>qualitycheck.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Bss</ProductName>
+                <DomainName>bss.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ubsms</ProductName>
+                <DomainName>ubsms.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Apigateway</ProductName>
+                <DomainName>apigateway.ap-southeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CloudAPI</ProductName>
+                <DomainName>apigateway.ap-southeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sts</ProductName>
+                <DomainName>sts.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CmsSiteMonitor</ProductName>
+                <DomainName>sitemonitor.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ace</ProductName>
+                <DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Mts</ProductName>
+                <DomainName>mts.ap-southeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>CF</ProductName>
+                <DomainName>cf.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Crm</ProductName>
+                <DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Location-inner</ProductName>
+                <DomainName>location-inner.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Aas</ProductName>
+                <DomainName>aas.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Emr</ProductName>
+                <DomainName>emr.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Httpdns</ProductName>
+                <DomainName>httpdns-api.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Drc</ProductName>
+                <DomainName>drc.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Push</ProductName>
+                <DomainName>cloudpush.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>YundunDdos</ProductName>
+                <DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Domain</ProductName>
+                <DomainName>domain.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ots</ProductName>
+                <DomainName>ots-pop.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cdn</ProductName>
+                <DomainName>cdn.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ram</ProductName>
+                <DomainName>ram.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Sales</ProductName>
+                <DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>OssAdmin</ProductName>
+                <DomainName>oss-admin.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ons</ProductName>
+                <DomainName>ons.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Oss</ProductName>
+                <DomainName>oss-ap-southeast-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Dysmsapi</ProductName>
+                <DomainName>dysmsapi.ap-southeast-1.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-st4-d01">
+        <RegionIds>
+            <RegionId>cn-shenzhen-st4-d01</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="eu-central-1">
+        <RegionIds>
+            <RegionId>eu-central-1</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.eu-central-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs.eu-central-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.eu-central-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Kms</ProductName>
+                <DomainName>kms.eu-central-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.eu-central-1.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Iot</ProductName>
+                <DomainName>iot.eu-central-1.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-zhangjiakou">
+        <RegionIds>
+            <RegionId>cn-zhangjiakou</RegionId>
+        </RegionIds>
+        <Products>
+            <Product>
+                <ProductName>Rds</ProductName>
+                <DomainName>rds.cn-zhangjiakou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Ecs</ProductName>
+                <DomainName>ecs.cn-zhangjiakou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Vpc</ProductName>
+                <DomainName>vpc.cn-zhangjiakou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Cms</ProductName>
+                <DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName>
+            </Product>
+            <Product>
+                <ProductName>Slb</ProductName>
+                <DomainName>slb.cn-zhangjiakou.aliyuncs.com</DomainName>
+            </Product>
+        </Products>
+    </Endpoint>
+</Endpoints>

+ 315 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/RoaAcsRequest.php

@@ -0,0 +1,315 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+abstract class RoaAcsRequest extends AcsRequest
+{
+    /**
+     * @var string
+     */
+    protected $uriPattern;
+    /**
+     * @var array
+     */
+    protected $pathParameters = array();
+    /**
+     * @var array
+     */
+    private $domainParameters = array();
+    /**
+     * @var string
+     */
+    private $dateTimeFormat = "D, d M Y H:i:s \G\M\T";
+    /**
+     * @var string
+     */
+    private static $headerSeparator = "\n";
+    /**
+     * @var string
+     */
+    private static $querySeparator = '&';
+    /**
+     * @var string
+     */
+    protected $method = 'RAW';
+    /**
+     * @var string
+     */
+    protected $acceptFormat = 'JSON';
+
+    /**
+     * @param $iSigner
+     * @param $credential
+     * @param $domain
+     *
+     * @return mixed|string
+     */
+    public function composeUrl($iSigner, $credential, $domain)
+    {
+        $this->headers['x-acs-version'] = &$this->version;
+
+        $this->prepareHeader($iSigner, $credential);
+
+        $signString = $this->getMethod() . self::$headerSeparator;
+        if (isset($this->headers['Accept'])) {
+            $signString .= $this->headers['Accept'];
+        }
+        $signString .= self::$headerSeparator;
+
+        if (isset($this->headers['Content-MD5'])) {
+            $signString .= $this->headers['Content-MD5'];
+        }
+        $signString .= self::$headerSeparator;
+
+        if (isset($this->headers['Content-Type'])) {
+            $signString .= $this->headers['Content-Type'];
+        }
+        $signString .= self::$headerSeparator;
+
+        if (isset($this->headers['Date'])) {
+            $signString .= $this->headers['Date'];
+        }
+        $signString .= self::$headerSeparator;
+
+        $uri         = $this->replaceOccupiedParameters();
+        $signString  .= $this->buildCanonicalHeaders();
+        $queryString = $this->buildQueryString($uri);
+        if (substr($queryString, -1) === '?') {
+            $queryString = substr($queryString, 0, -1);
+        }
+        $signString                     .= $queryString;
+        $this->stringToBeSigned         = $signString;
+        $this->headers['Authorization'] = 'acs ' . $credential->getAccessKeyId() . ':'
+                                          . $iSigner->signString($signString, $credential->getAccessSecret());
+        $requestUrl                     = $this->getProtocol() . '://' . $domain . $queryString;
+        return $requestUrl;
+    }
+
+    /**
+     * @return string
+     */
+    private function concatQueryString()
+    {
+        $sortMap = $this->queryParameters;
+        if (null == $sortMap || count($sortMap) == 0) {
+            return '';
+        }
+        $queryString = '';
+        ksort($sortMap);
+        foreach ($sortMap as $sortMapKey => $sortMapValue) {
+            $queryString .= $sortMapKey;
+            if (isset($sortMapValue)) {
+                $queryString = $queryString . '=' . urlencode($sortMapValue);
+            }
+            $queryString .= self::$querySeparator;
+        }
+
+        if (count($sortMap) > 0) {
+            $queryString = substr($queryString, 0, -1);
+        }
+        return '?' . $queryString;
+    }
+
+    /**
+     * @param $iSigner
+     * @param $credential
+     */
+    private function prepareHeader($iSigner, $credential)
+    {
+        $this->headers['Date'] = gmdate($this->dateTimeFormat);
+        if (null == $this->acceptFormat) {
+            $this->acceptFormat = 'RAW';
+        }
+        $this->headers['Accept']                  = $this->formatToAccept($this->getAcceptFormat());
+        $this->headers['x-acs-signature-method']  = $iSigner->getSignatureMethod();
+        $this->headers['x-acs-signature-version'] = $iSigner->getSignatureVersion();
+        if ($iSigner->getSignatureType() != null) {
+            $this->headers['x-acs-signature-type'] = $iSigner->getSignatureType();
+        }
+        $this->headers['x-acs-region-id'] = $this->regionId;
+        $content                          = $this->getDomainParameter();
+        if ($content != null) {
+            $this->headers['Content-MD5'] = base64_encode(md5(json_encode($content), true));
+        }
+        if ($this->acceptFormat === 'JSON') {
+            $this->headers['Content-Type'] = 'application/json;charset=utf-8';
+        } else {
+            $this->headers['Content-Type'] = 'application/octet-stream;charset=utf-8';
+        }
+        if ($credential->getSecurityToken() != null) {
+            $this->headers['x-acs-security-token'] = $credential->getSecurityToken();
+        }
+        if ($credential instanceof BearerTokenCredential) {
+            $this->headers['x-acs-bearer-token'] = $credential->getBearerToken();
+        }
+    }
+
+    /**
+     * @return mixed|string
+     */
+    private function replaceOccupiedParameters()
+    {
+        $result = $this->uriPattern;
+        foreach ($this->pathParameters as $pathParameterKey => $apiParameterValue) {
+            $target = '[' . $pathParameterKey . ']';
+            $result = str_replace($target, $apiParameterValue, $result);
+        }
+        return $result;
+    }
+
+    /**
+     * @return string
+     */
+    private function buildCanonicalHeaders()
+    {
+        $sortMap = array();
+        foreach ($this->headers as $headerKey => $headerValue) {
+            $key = strtolower($headerKey);
+            if (strpos($key, 'x-acs-') === 0) {
+                $sortMap[$key] = $headerValue;
+            }
+        }
+        ksort($sortMap);
+        $headerString = '';
+        foreach ($sortMap as $sortMapKey => $sortMapValue) {
+            $headerString = $headerString . $sortMapKey . ':' . $sortMapValue . self::$headerSeparator;
+        }
+        return $headerString;
+    }
+
+    /**
+     * @param $uri
+     *
+     * @return array
+     */
+    private function splitSubResource($uri)
+    {
+        $queIndex = strpos($uri, '?');
+        $uriParts = array();
+        if (null != $queIndex) {
+            $uriParts[] = substr($uri, 0, $queIndex);
+            $uriParts[] = substr($uri, $queIndex + 1);
+        } else {
+            $uriParts[] = $uri;
+        }
+        return $uriParts;
+    }
+
+    /**
+     * @param $uri
+     *
+     * @return bool|mixed|string
+     */
+    private function buildQueryString($uri)
+    {
+        $uriParts = $this->splitSubResource($uri);
+        $sortMap  = $this->queryParameters;
+        if (isset($uriParts[1])) {
+            $sortMap[$uriParts[1]] = null;
+        }
+        $queryString = $uriParts[0];
+        if (count($uriParts)) {
+            $queryString .= '?';
+        }
+        ksort($sortMap);
+        foreach ($sortMap as $sortMapKey => $sortMapValue) {
+            $queryString .= $sortMapKey;
+            if (isset($sortMapValue)) {
+                $queryString = $queryString . '=' . $sortMapValue;
+            }
+            $queryString .= self::$querySeparator;
+        }
+        if (0 < count($sortMap)) {
+            $queryString = substr($queryString, 0, -1);
+        }
+        return $queryString;
+    }
+
+    /**
+     * @param $acceptFormat
+     *
+     * @return string
+     */
+    private function formatToAccept($acceptFormat)
+    {
+        if ($acceptFormat === 'JSON') {
+            return 'application/json';
+        }
+
+        if ($acceptFormat === 'XML') {
+            return 'application/xml';
+        }
+
+        return 'application/octet-stream';
+    }
+
+    /**
+     * @return array
+     */
+    public function getPathParameters()
+    {
+        return $this->pathParameters;
+    }
+
+    /**
+     * @param $name
+     * @param $value
+     */
+    public function putPathParameter($name, $value)
+    {
+        $this->pathParameters[$name] = $value;
+    }
+
+    /**
+     * @return array
+     */
+    public function getDomainParameter()
+    {
+        return $this->domainParameters;
+    }
+
+    /**
+     * @param $name
+     * @param $value
+     */
+    public function putDomainParameters($name, $value)
+    {
+        $this->domainParameters[$name] = $value;
+    }
+
+    /**
+     * @return string
+     */
+    public function getUriPattern()
+    {
+        return $this->uriPattern;
+    }
+
+    /**
+     * @param $uriPattern
+     *
+     * @return mixed
+     */
+    public function setUriPattern($uriPattern)
+    {
+        return $this->uriPattern = $uriPattern;
+    }
+
+}

+ 155 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/RpcAcsRequest.php

@@ -0,0 +1,155 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+abstract class RpcAcsRequest extends AcsRequest
+{
+    /**
+     * @var string
+     */
+    private $dateTimeFormat = 'Y-m-d\TH:i:s\Z';
+    /**
+     * @var array
+     */
+    private $domainParameters = array();
+    /**
+     * @var string
+     */
+    protected $method = 'GET';
+    /**
+     * @var string
+     */
+    protected $acceptFormat = 'JSON';
+
+    /**
+     * @param string|bool $value
+     *
+     * @return string
+     */
+    private function prepareValue($value)
+    {
+        if (is_bool($value)) {
+            if ($value) {
+                return 'true';
+            }
+
+            return 'false';
+        }
+
+        return $value;
+    }
+
+    /**
+     * @param $iSigner
+     * @param $credential
+     * @param $domain
+     *
+     * @return bool|mixed|string
+     */
+    public function composeUrl($iSigner, $credential, $domain)
+    {
+        $apiParams = parent::getQueryParameters();
+        foreach ($apiParams as $key => $value) {
+            $apiParams[$key] = $this->prepareValue($value);
+        }
+        $apiParams['RegionId']         = $this->getRegionId();
+        $apiParams['AccessKeyId']      = $credential->getAccessKeyId();
+        $apiParams['Format']           = $this->getAcceptFormat();
+        $apiParams['SignatureMethod']  = $iSigner->getSignatureMethod();
+        $apiParams['SignatureVersion'] = $iSigner->getSignatureVersion();
+        if ($iSigner->getSignatureType() != null) {
+            $apiParams['SignatureType'] = $iSigner->getSignatureType();
+        }
+        $apiParams['SignatureNonce'] = md5(uniqid(mt_rand(), true));
+        $apiParams['Timestamp']      = gmdate($this->dateTimeFormat);
+        $apiParams['Action']         = $this->getActionName();
+        $apiParams['Version']        = $this->getVersion();
+        if ($credential->getSecurityToken() != null) {
+            $apiParams['SecurityToken'] = $credential->getSecurityToken();
+        }
+        if ($credential instanceof BearerTokenCredential) {
+            $apiParams['BearerToken'] = $credential->getBearerToken();
+        }
+        $apiParams['Signature'] = $this->computeSignature($apiParams, $credential->getAccessSecret(), $iSigner);
+        if (parent::getMethod() === 'POST') {
+            $requestUrl = $this->getProtocol() . '://' . $domain . '/';
+            foreach ($apiParams as $apiParamKey => $apiParamValue) {
+                $this->putDomainParameters($apiParamKey, $apiParamValue);
+            }
+            return $requestUrl;
+        }
+
+        $requestUrl = $this->getProtocol() . '://' . $domain . '/?';
+
+        foreach ($apiParams as $apiParamKey => $apiParamValue) {
+            $requestUrl .= "$apiParamKey=" . urlencode($apiParamValue) . '&';
+        }
+        return substr($requestUrl, 0, -1);
+    }
+
+    /**
+     * @param $parameters
+     * @param $accessKeySecret
+     * @param $iSigner
+     *
+     * @return mixed
+     */
+    private function computeSignature($parameters, $accessKeySecret, $iSigner)
+    {
+        ksort($parameters);
+        $canonicalizedQueryString = '';
+        foreach ($parameters as $key => $value) {
+            $canonicalizedQueryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($value);
+        }
+        $this->stringToBeSigned =
+            parent::getMethod() . '&%2F&' . $this->percentEncode(substr($canonicalizedQueryString, 1));
+        return $iSigner->signString($this->stringToBeSigned, $accessKeySecret . '&');
+    }
+
+    /**
+     * @param $str
+     *
+     * @return string|string[]|null
+     */
+    protected function percentEncode($str)
+    {
+        $res = urlencode($str);
+        $res = str_replace(array('+', '*'), array('%20', '%2A'), $res);
+        $res = preg_replace('/%7E/', '~', $res);
+        return $res;
+    }
+
+    /**
+     * @return array
+     */
+    public function getDomainParameter()
+    {
+        return $this->domainParameters;
+    }
+
+    /**
+     * @param $name
+     * @param $value
+     */
+    public function putDomainParameters($name, $value)
+    {
+        $this->domainParameters[$name] = $value;
+    }
+}

+ 36 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/CredentialTest.php

@@ -0,0 +1,36 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once '../../Config.php';
+
+class CredentialTest extends PHPUnit_Framework_TestCase
+{
+    public function testCredential()
+    {
+        $credential = new Credential("accessKeyId", "accessSecret");
+        $this->assertEquals("accessKeyId", $credential->getAccessKeyId());
+        $this->assertEquals("accessSecret", $credential->getAccessSecret());
+        $this->assertNotNull($credential->getRefreshDate());
+
+        $dateNow = date("Y-m-d\TH:i:s\Z");
+        $credential->setExpiredDate(1);
+        $this->assertNotNull($credential->getExpiredDate());
+        $this->assertTrue($credential->getExpiredDate() > $dateNow);
+    }
+}

+ 30 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac1SignerTest.php

@@ -0,0 +1,30 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once '../../Config.php';
+
+class ShaHmac1SignerTest extends PHPUnit_Framework_TestCase
+{
+    public function testShaHmac1Signer()
+    {
+        $signer = new ShaHmac1Signer();
+        $this->assertEquals("33nmIV5/p6kG/64eLXNljJ5vw84=",
+                            $signer->signString("this is a ShaHmac1 test.", "accessSecret"));
+    }
+}

+ 30 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac256SignerTest.php

@@ -0,0 +1,30 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once '../../Config.php';
+
+class ShaHmac256SignerTest extends PHPUnit_Framework_TestCase
+{
+    public function testShaHmac256Signer()
+    {
+        $signer = new ShaHmac256Signer();
+        $this->assertEquals("TpF1lE/avV9EHGWGg9Vo/QTd2bLRwFCk9jjo56uRbCo=",
+                            $signer->signString("this is a ShaHmac256 test.", "accessSecret"));
+    }
+}

+ 49 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/BaseTest.php

@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class BaseTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @var null
+     */
+    public $client = null;
+
+    public function setUp()
+    {
+        $path = substr(__DIR__, 0, strripos(__DIR__, DIRECTORY_SEPARATOR)) . DIRECTORY_SEPARATOR;
+        include_once $path . 'Config.php';
+        include_once 'Ecs/Rquest/DescribeRegionsRequest.php';
+        include_once 'BatchCompute/ListImagesRequest.php';
+
+        $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", "AccessKey", "AccessSecret");
+        $this->client   = new DefaultAcsClient($iClientProfile);
+    }
+
+    /**
+     * @param $propertyKey
+     */
+    public function getProperty($propertyKey)
+    {
+        $accessKey      = "";
+        $accessSecret   = "";
+        $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", "AccessKey", "AccessSecret");
+    }
+}

+ 31 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/BatchCompute/ListImagesRequest.php

@@ -0,0 +1,31 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+namespace UnitTest\BatchCompute\Request;
+
+class ListImagesRequest extends \RoaAcsRequest
+{
+    public function __construct()
+    {
+        parent::__construct("BatchCompute", "2013-01-11", "ListImages");
+        $this->setUriPattern("/images");
+        $this->setMethod("GET");
+    }
+}

+ 43 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/DefaultAcsClientTest.php

@@ -0,0 +1,43 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once 'BaseTest.php';
+
+use UnitTest\BatchCompute\Request as BC;
+use UnitTest\Ecs\Request as Ecs;
+
+class DefaultAcsClientTest extends BaseTest
+{
+    public function testDoActionRPC()
+    {
+        $request  = new Ecs\DescribeRegionsRequest();
+        $response = $this->client->doAction($request);
+
+        $this->assertNotNull($response->RequestId);
+        $this->assertNotNull($response->Regions->Region[0]->LocalName);
+        $this->assertNotNull($response->Regions->Region[0]->RegionId);
+    }
+
+    public function testDoActionROA()
+    {
+        $request  = new BC\ListImagesRequest();
+        $response = $this->client->doAction($request);
+        $this->assertNotNull($response);
+    }
+}

+ 117 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ecs/Rquest/DescribeRegionsRequest.php

@@ -0,0 +1,117 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+namespace UnitTest\Ecs\Request;
+
+class DescribeRegionsRequest extends \RpcAcsRequest
+{
+    public function __construct()
+    {
+        parent::__construct("Ecs", "2014-05-26", "DescribeRegions");
+    }
+
+    /**
+     * @var
+     */
+    private $ownerId;
+
+    /**
+     * @var
+     */
+    private $resourceOwnerAccount;
+
+    /**
+     * @var
+     */
+    private $resourceOwnerId;
+
+    /**
+     * @var
+     */
+    private $ownerAccount;
+
+    /**
+     * @return mixed
+     */
+    public function getOwnerId()
+    {
+        return $this->ownerId;
+    }
+
+    /**
+     * @param $ownerId
+     */
+    public function setOwnerId($ownerId)
+    {
+        $this->ownerId                    = $ownerId;
+        $this->queryParameters["OwnerId"] = $ownerId;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getResourceOwnerAccount()
+    {
+        return $this->resourceOwnerAccount;
+    }
+
+    /**
+     * @param $resourceOwnerAccount
+     */
+    public function setResourceOwnerAccount($resourceOwnerAccount)
+    {
+        $this->resourceOwnerAccount                    = $resourceOwnerAccount;
+        $this->queryParameters["ResourceOwnerAccount"] = $resourceOwnerAccount;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getResourceOwnerId()
+    {
+        return $this->resourceOwnerId;
+    }
+
+    /**
+     * @param $resourceOwnerId
+     */
+    public function setResourceOwnerId($resourceOwnerId)
+    {
+        $this->resourceOwnerId                    = $resourceOwnerId;
+        $this->queryParameters["ResourceOwnerId"] = $resourceOwnerId;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getOwnerAccount()
+    {
+        return $this->ownerAccount;
+    }
+
+    /**
+     * @param $ownerAccount
+     */
+    public function setOwnerAccount($ownerAccount)
+    {
+        $this->ownerAccount                    = $ownerAccount;
+        $this->queryParameters["OwnerAccount"] = $ownerAccount;
+    }
+}

+ 107 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/InteTest.php

@@ -0,0 +1,107 @@
+<?php
+require_once '../../Config.php';
+
+use UnitTest\Ft\TestRoaApiRequest;
+use UnitTest\Ft\TestRpcApiRequest;
+
+$clientProfile = DefaultProfile::getProfile(
+    "cn-hangzhou",
+    "<your Ak>",
+    "<your Secret>",
+    "<your StsToken>"
+);
+
+DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "Ft", "ft.aliyuncs.com");
+
+print_r("1.开始测试普通AK访问: ");
+echo "\n";
+$client = new DefaultAcsClient($clientProfile);
+# 创建 API 请求并设置参数
+$request = new TestRpcApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $client->getAcsResponse($request);
+print_r($response);
+
+# 创建 API 请求并设置参数
+$request = new TestRoaApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $client->getAcsResponse($request);
+print_r($response);
+
+//RoleArn
+echo "\n";
+print_r("2.开始测试RoleArn: ");
+echo "\n";
+$ramRoleArnProfile = DefaultProfile::getRamRoleArnProfile(
+    "cn-hangzhou",
+    "<your Ak>",
+    "<your Secret>",
+    "<your RoleArn>",
+    "<your RoleSessionName>"
+);
+
+$roleArnClient = new DefaultAcsClient($ramRoleArnProfile);
+
+# 创建 API 请求并设置参数
+$request = new TestRpcApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $roleArnClient->getAcsResponse($request);
+print_r($response);
+
+# 创建 API 请求并设置参数
+$request = new TestRoaApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $roleArnClient->getAcsResponse($request);
+print_r($response);
+
+echo "\n";
+print_r("3.开始测试EcsArn: ");
+echo "\n";
+$ecsRamRoleProfile = DefaultProfile::getEcsRamRoleProfile(
+    "cn-hangzhou",
+    "<your EcsRoleName>"
+);
+
+$ecsRamRoleClient = new DefaultAcsClient($ecsRamRoleProfile);
+
+# 创建 API 请求并设置参数
+$request = new TestRpcApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $ecsRamRoleClient->getAcsResponse($request);
+print_r($response);
+
+# 创建 API 请求并设置参数
+$request = new TestRoaApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $ecsRamRoleClient->getAcsResponse($request);
+print_r($response);
+
+echo "\n";
+print_r("4.开始测试BearerToken: ");
+echo "\n";
+$bearerTokenProfile = DefaultProfile::getBearerTokenProfile(
+    "cn-hangzhou",
+    "<Your Bearer Token>"
+);
+
+$bearerTokenClient = new DefaultAcsClient($bearerTokenProfile);
+
+# 创建 API 请求并设置参数
+$request = new TestRpcApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $bearerTokenClient->getAcsResponse($request);
+print_r($response);
+
+# 创建 API 请求并设置参数
+$request = new TestRoaApiRequest();
+$request->setQueryParam("test");
+# 发起请求并处理返回
+$response = $bearerTokenClient->getAcsResponse($request);
+print_r($response);

+ 85 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/TestRoaApiRequest.php

@@ -0,0 +1,85 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: zhangw
+ * Date: 2017/12/19
+ * Time: 下午6:39
+ */
+
+namespace UnitTest\Ft;
+
+class TestRoaApiRequest extends \RoaAcsRequest
+{
+    public function __construct()
+    {
+        parent::__construct("Ft", "2016-01-02", "TestRoaApi");
+        $this->setUriPattern("/web/cloudapi");
+        $this->setMethod("GET");
+    }
+
+    /**
+     * @var
+     */
+    private $queryParam;
+
+    /**
+     * @var
+     */
+    private $bodyParam;
+
+    /**
+     * @var
+     */
+    private $headerParam;
+
+    /**
+     * @return mixed
+     */
+    public function getQueryParam()
+    {
+        return $this->queryParam;
+    }
+
+    /**
+     * @param $queryParam
+     */
+    public function setQueryParam($queryParam)
+    {
+        $this->queryParam                    = $queryParam;
+        $this->queryParameters["QueryParam"] = $queryParam;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getBodyParam()
+    {
+        return $this->bodyParam;
+    }
+
+    /**
+     * @param $bodyParam
+     */
+    public function setBodyParam($bodyParam)
+    {
+        $this->bodyParam                    = $bodyParam;
+        $this->queryParameters["BodyParam"] = $bodyParam;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getHeaderParam()
+    {
+        return $this->headerParam;
+    }
+
+    /**
+     * @param $headerParam
+     */
+    public function setHeaderParam($headerParam)
+    {
+        $this->headerParam                = $headerParam;
+        $this->headerParam["HeaderParam"] = $headerParam;
+    }
+}

+ 61 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Ft/TestRpcApiRequest.php

@@ -0,0 +1,61 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: zhangw
+ * Date: 2017/12/19
+ * Time: 下午6:39
+ */
+
+namespace UnitTest\Ft;
+
+class TestRpcApiRequest extends \RpcAcsRequest
+{
+    public function __construct()
+    {
+        parent::__construct("Ft", "2016-01-01", "TestRpcApi");
+    }
+
+    /**
+     * @var
+     */
+    private $queryParam;
+
+    /**
+     * @var
+     */
+    private $bodyParam;
+
+    /**
+     * @return mixed
+     */
+    public function getQueryParam()
+    {
+        return $this->queryParam;
+    }
+
+    /**
+     * @param $queryParam
+     */
+    public function setQueryParam($queryParam)
+    {
+        $this->queryParam                    = $queryParam;
+        $this->queryParameters["QueryParam"] = $queryParam;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getBodyParam()
+    {
+        return $this->bodyParam;
+    }
+
+    /**
+     * @param $bodyParam
+     */
+    public function setBodyParam($bodyParam)
+    {
+        $this->bodyParam                    = $bodyParam;
+        $this->queryParameters["BodyParam"] = $bodyParam;
+    }
+}

+ 30 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Http/HttpHelperTest.php

@@ -0,0 +1,30 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once '../BaseTest.php';
+
+class HttpHelperTest extends BaseTest
+{
+    public function testCurl()
+    {
+        $httpResponse = HttpHelper::curl("ecs.aliyuncs.com");
+        $this->assertEquals(400, $httpResponse->getStatus());
+        $this->assertNotNull($httpResponse->getBody());
+    }
+}

+ 66 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Profile/DefaultProfileTest.php

@@ -0,0 +1,66 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once '../../Config.php';
+
+class DefaultProfileTest extends PHPUnit_Framework_TestCase
+{
+    public function testGetProfile()
+    {
+        $profile = DefaultProfile::getProfile("cn-hangzhou", "accessId", "accessSecret");
+        $this->assertEquals("cn-hangzhou", $profile->getRegionId());
+        $this->assertEquals("accessId", $profile->getCredential()->getAccessKeyId());
+        $this->assertEquals("accessSecret", $profile->getCredential()->getAccessSecret());
+    }
+
+    public function testAddEndpoint()
+    {
+        $profile = DefaultProfile::getProfile("cn-hangzhou", "accessId", "accessSecret");
+        $profile::addEndpoint("cn-hangzhou", "cn-hangzhou", "TestProduct", "testproduct.aliyuncs.com");
+        $endpoints = $profile::getEndpoints();
+        foreach ($endpoints as $key => $endpoint) {
+            if ("cn-hangzhou" == $endpoint->getName()) {
+                $regionIds = $endpoint->getRegionIds();
+                $this->assertContains("cn-hangzhou", $regionIds);
+
+                $productDomains = $endpoint->getProductDomains();
+                $this->assertNotNull($productDomains);
+                $productDomain = $this->getProductDomain($productDomains);
+                $this->assertNotNull($productDomain);
+                $this->assertEquals("TestProduct", $productDomain->getProductName());
+                $this->assertEquals("testproduct.aliyuncs.com", $productDomain->getDomainName());
+            }
+        }
+    }
+
+    /**
+     * @param $productDomains
+     *
+     * @return ProductDomain|null
+     */
+    private function getProductDomain($productDomains)
+    {
+        foreach ($productDomains as $productDomain) {
+            if ($productDomain->getProductName() === 'TestProduct') {
+                return $productDomain;
+            }
+        }
+        return null;
+    }
+}

+ 52 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Regions/EndPointByLocationTest.php

@@ -0,0 +1,52 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: zhangw
+ * Date: 2017/7/17
+ * Time: 下午4:57
+ */
+
+include_once '../../Config.php';
+
+use PHPUnit\Framework\TestCase;
+
+class EndPointByLocationTest extends TestCase
+{
+    /**
+     * @var
+     */
+    private $locationService;
+
+    /**
+     * @var
+     */
+    private $clientProfile;
+
+    private function initClient()
+    {
+        # 创建 DefaultAcsClient 实例并初始化
+        $this->clientProfile = DefaultProfile::getProfile(
+            "cn-shanghai",                   # 您的 Region ID
+            "<your AK>",               # 您的 Access Key ID
+            "<your Secret>"            # 您的 Access Key Secret
+        );
+
+        $this->locationService = new LocationService($this->clientProfile);
+    }
+
+    public function testFindProductDomain()
+    {
+        $this->initClient();
+        $domain = $this->locationService->findProductDomain("cn-shanghai", "apigateway", "openAPI", "CloudAPI");
+        $this->assertEquals("apigateway.cn-shanghai.aliyuncs.com", $domain);
+    }
+
+    public function testFindProductDomainWithAddEndPoint()
+    {
+        DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "CloudAPI", "apigateway.cn-shanghai123.aliyuncs.com");
+        $this->initClient();
+        $domain = $this->locationService->findProductDomain("cn-shanghai", "apigateway", "openAPI", "CloudAPI");
+        $this->assertEquals("apigateway.cn-shanghai123.aliyuncs.com", $domain);
+    }
+
+}

+ 28 - 0
vendor/voduploadsdk/aliyun-php-sdk-core/UnitTest/Regions/EndpointProviderTest.php

@@ -0,0 +1,28 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+include_once '../../Config.php';
+
+class EndpointProviderTest extends PHPUnit_Framework_TestCase
+{
+    public function testFindProductDomain()
+    {
+        $this->assertEquals("ecs.aliyuncs.com", EndpointProvider::findProductDomain("cn-hangzhou", "Ecs"));
+    }
+}

+ 2 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/.coveralls.yml

@@ -0,0 +1,2 @@
+coverage_clover: coverage.xml
+json_path: coverage.json

+ 8 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/.gitignore

@@ -0,0 +1,8 @@
+vendor
+composer.lock
+doc
+output
+.idea
+.buildpath
+.project
+.settings

+ 21 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/.travis.yml

@@ -0,0 +1,21 @@
+language: php
+php:
+  - 7.1
+  - 7.0
+  - 5.6
+  - 5.5
+  - 5.4
+install:
+  - composer self-update
+  - composer install --no-interaction
+script:
+  - php vendor/bin/phpunit
+after_success:
+  - php vendor/bin/coveralls -v
+env:
+  global:
+    - secure: SzmQ854lQmhV6ZkAG7lQNTY3CkazrXnDSb6VMwPU/sdaLGxPO159AW3fJS5d0sO/XN1P8x5WNkoA4i9soDlLBRibEEISNUM/2EMnpszsRymZ9o97PrS2IgORXTUL/OF+rpATzyNVB2p+2l9hBLiGf17exMSA5iOeY7W6E+VKPGi8TFykgbGUnLKU0h1hV3rzmtfGjOXcSpvYU/hxeZD/J/+6m5Gic9b/pNS+AbfTj7Y7Ru9tNsnyUP29V/vtEYtpQir3ZxQiSiUv9idybgGnJBOMYydJofb/mpFYHhYLSWqtMKGNLpeawmqs4z8S1Tvx5U5uzW5+h/mpzhvBaFlWGpm8t89BQxun5LVX5NiYCrV7TqaLitGp1cSpMjMDnrnSTNzk1exVz+rWZZcWS7yB9ULYA681GA8StXWk167qB7Y30iK1dFK3+2mDN2cEY+qLs8+bupDowQ4eOM+eqfhxX8F8+ouKcKomETsjiIwL+CUsIe6wjvnYFWb1YlRhbsI75bblHApflohnt6gVSJ78ZPqID+u2oUMjmIWXLTnRR2Y2tgEW8uqHeIoQ8BBntLdQDmv0BO4FpnGQIwrUUwQYeNzEM0DOr3hWZhyDR6Xvl+9H0l52xjANaSqpuTZfC3zmeFTG7kIjydvxNePRrony6XAawL9BvI7aKWuVF6YVjPM=
+    - secure: nEhsU8aUQqsAJeuger+boh51oTpeo4YNG7vUWbKxdwVDIrcLb+l7r7RvTlxU7mt8IZTWwicgri18mh+Wi04BwX4ulBA1SCs8jPbL51KEo5izoDGGtLSd2fuPHdslYSrwagrvq90EPnDT/7fHWn/TAoT+rueZzjNyCu5IGSgL3GnXaUThsJ82NMePL2YRdP4Q1qmtZPRFBOkOQ6F0heuV8fw8sLyTO3txaCQum9YneGxrWxOl/E8zB0qtlnPwLE8ogaHZMQh2/jThmTbI5UqwRTxV4f0qoD5eJYH+j0fslsSAjsg/HPnSuVcnccK3zSU+s2sV4dPCcISzECJvZEObwipfxOGhdqt5gMcxHhn8qVsbT97iIh106pG/BJCDgQd2EeVW8WfCi6cCuCKIMipvVkMypkmjQHWU1XaqPzILl7g5diW9Ctp2C4Akq5dYdrdu8IrnVK1ShtkQVaWU+S/Bht8VU5gYP7olPW/GdTz7sceU1NOIC4NPXqmWKbfavR98U5dkHMLMvzABYL1Q87h+KhPD1c14NUyw3YENUW7REiF/X5lERRm5H0kJ/1JqAa+AgeHQEGmPVuZV2s/na4b0S1479QRVmSM/6ZzXQpU+Y8jCRfETpUFA4S331369kirHgCqDlxyIntuEKrzivD02/O+5C3eJ0WHRz6QsN2/R4qg=
+    - secure: ZTvzNXEZP4efl+a/3VGMmdabfUQp83v5/lecMns039Ro7UuZYPdtbPtpPnpjaTI6Htd22A4Rva5BU/3JCQJAyQvpbKNn5sGou2SmfQu3o0SyhggSB7gWjYAf707aW1j4bHYfP8IjDS5NjuVk3AqXeNSUuLRUXRmwSOB0lSYiRhiTJY+pUdBl382Hx4NbhIU/gmOzRoJCs7coTip8IURXYEHPi5dnDWluajxI+TgNXFccSgEleeQDJajYgXmpLb2EhSj8piipOnVgaCEE5bh5fbp32024Qq38SGHKcbfnwj2IInpZpZESJknRKoqAlFjdOJhork82dBcvAr5JxCBZKx5IuwXcTjxkQ6tRtBeqhPLPFuX3MQ8WrtU+wniPM0RCH/VoFkUKO7JGQDwmoi2AKago4PsuDs4P6Y6CeuOVpcso731GwwMNhIJcyrJJivXprQNEGsEw+9wLjU1qNYs6IIA3S/gPzFrNbdX5Wf8vxt0vLpgYvBNtPnLMejMtknuyfVzf5iKuVVoGPDTEz+ajs06+jfoPfm/4sLTaLghuVH7Adm74OpF769JQNnQYKwJuu4bNlcbLJChulCEMBOx7myqo/9O6RCTuqzHaGmVWNot4RGqRFHgJGl/JJf0WpAVitbhbRH3kGoyKb6jFM74CJbPsE7OORlJLDC3cdD3C8Pk=
+    - secure: Qr5NR4CVzBKCQgRgMH0x772TPJ1+brx3UCvtRNu8fi4j3p8bz+HDMjBaBDSFmEB09nunLI55/8mj88/5GXmnpFs8+CPTkcW+QZOcxg3cxpI4SNmxoB12/ZawlFHAqSUaRRE7RUWVkY3KL8tIGjEZcFyUBQ1DVNX3OMpiKs3NLtHa7oUIknyBxdSokm4kpLhSXYe7WmO0vhuZbMZE0S1EISToiBS6AdhGUEbTLJ/vNsIDY07fu6+Vh3HxVbyUFPqUZGlkZpQ+2xMJ3kiqPBMrXtRF/IhhPjORDil6Ns9SQ8/AAlaCddvYvRaT4Pjv2/aX+t3l28qI1qmryPtWXpce5UXecWGYqdRpSJc6Y/pEt4m4FeeGoEFWnSPGIs7FRmeiis8q2rojGZ18i4vI/k4iHmqEBnTlMp3SWnRb9L1adJ8ZAWln8aC88gkQXm67w7+1CxLycerbYj9H1ugqHENuHcxv4uHUcZgEENX3EWatu8i9+K2IUuU/2zcmpu7qtsziYcoyW8DOOmYpJfXGMLtmF9+pqp/Tp6i0tltFSEfmY3N8o7xvv3enLvFHsjL+3ElFdd1blUPSrvZJHgA9M3lJ+QF1RJZCpJqgPlQ0XOZK1Bf4P46zpEj01wKaK4JQrkLPRXhbBOuIJn5O6WlFJyPX4+SaBfwTzb4AvM4aUg2TgTg=
+    - secure: Inw5ftA8fxvhMHRZwoZzATxn4WICJsCq7ZX4y2gI+b/8u0JQIsbLgY9WTYV+XdSxOoNwuVa1oUxEWI0aDORtXKC3XaIXXKrwndag0zxS77JEYwWvQsjM7BhEbF7MF7MYk8rRXpn6mbfGAT/NfqEOx91RCY8UKeMzD0oPkpkBnJ9Ekuod6JBBq+7j3v4mYUItA8pxvw7b4Pdd4z2xzjgOwNhJYMOCpts50DWZI+WXj0HvTYaMXe5mJJtORK5lsr0a9cbsBqAzE6l+3zGI8XkgHn130ux5XH3DE7hZBeti3ZNaO3d2Vv+496/1EObG0rSFk+z3dmNKqjMz4nh3bYIkdLMegwmgCWs2mvQhkwYhzmnPRHVSERrgZjSWnuKn2PKnBar6tui9KaLNgpo2j3jWpwMLJ3bGAfE5JtMppxAxNqj/q+YB2UZo7Mn7EDjkTDjgxCuazTJwWqH7xxCOykWPABBI17P3JaOXQJEK39LavpfSMm3kdmU0ocpUs7FniLuFm6xL71VxY1wHG10yskczEcFHZ3iyIyGM+xum4vbt5y6Yg+zfdExYQsbrxHDDZ3HbHY3tEU0WhM55vrC42NIXRWqXqJ8OAxpl4nivfx96eoBAThiUU9xXtZmh7WRFVYsstoGtxZwfk5+bi+oeVO9kih4xabwbgHgL9BTc1TR1C4U=

+ 132 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/CHANGELOG.md

@@ -0,0 +1,132 @@
+# ChangeLog - Aliyun OSS SDK for PHP
+
+## v2.4.3 / 2021-08-25
+* Fixed: integer overflow in PHP5.x.
+
+## v2.4.2 / 2021-06-04
+* Compatible with PHP8.
+* Fixed: compatible with PHP5.4.
+* Fixed: the signature is incorrect in some scenarios
+* Update: change $requestUrl from a member variable to a local variable.
+
+## v2.4.1 / 2020-09-29
+* Fixed: the getBucketPolicy bug.
+
+
+## v2.4.0 / 2020-08-31
+
+* Added: disable Expect: 100-continue
+* Added: support getBucketInfo
+* Added: support getBucketStat
+* Added: support bucket policy
+* Added: support bucket encryption
+* Added: support bucket tagging
+* Added: support bucket  worm
+* Added: support versioning
+* Added: support request payment
+* Added: support object tagging
+* Added: support code archive
+* Added: support process object 
+* Added: support traffic limit paramter 
+* Added: support upload object from file handle
+* Added: support getSimplifiedObjectMeta
+* Fixed: the object name can not be '0' stirng.
+* Update: endpoint validity check
+* Update: add new pre-signed url api
+
+
+## v2.3.1 / 2019-01-15
+
+* translate chinese comments into english
+* Added: endpoint validity check
+
+## v2.3.0 / 2018-01-05
+
+* Fixed: putObject support creating empty files
+* Fixed: createBucket support IA/Archive
+* Added: support restoreObject
+* Added: support the Symlink feature
+* Added: support getBucketLocation
+* Added: support getBucketMeta
+* Added: support proxy server Proxy
+
+## v2.2.4 / 2017-04-25
+
+* Fixed getObject to local file bug
+
+## v2.2.3 / 2017-04-14
+
+* Fixed md5 check
+
+## v2.2.2 / 2017-01-18
+
+* Resolve to run the connection number and memory bug on php7
+
+## v2.2.1 / 2016-12-01
+
+* No HTTP curl is allowed to automatically populate accept-encoding
+
+## v2.2.0 / 2016-11-22
+
+* Fixed PutObject/CompleteMultipartUpload return values(#26)
+
+## v2.1.0 / 2016-11-12
+
+* Added[RTMP](https://help.aliyun.com/document_detail/44297.html)interface
+* Add support[image service](https://help.aliyun.com/document_detail/44686.html)
+
+## v2.0.7 / 2016-06-17
+
+* Support append object
+
+## v2.0.6
+
+* Trim access key id/secret and endpoint
+* Refine tests and setup travis CI
+
+## v2.0.5
+
+* Added Add/Delete/Get BucketCname interface
+
+## v2.0.4
+
+* Added Put/Get Object Acl interface
+
+## v2.0.3
+
+* Fixing the constants in Util is defined in a PHP version that is less than 5.6.
+
+## v2.0.2
+
+* The problem of content-type cannot be specified when restoring multipart uploads
+
+## v2.0.1
+
+* Increase the ListObjects/ListMultipartUploads special characters
+* Provides the interface to get the details of the OssException
+
+
+## 2015.11.25
+
+* **Large version upgrade, no longer compatible with previous interface, new version has made great improvements to ease of use, suggesting that users migrate to a new version.**
+
+## Modify the content
+
+* PHP 5.2 is no longer supported
+
+### Add the cotent
+
+* Introduce namespace
+* Interface naming and modification, using hump naming
+* The interface is modified, and the common parameters are extracted from the Options parameter.
+* The interface returns the result modification, processing the return result, and the user can directly get the data structure easily processed 
+* OssClient's constructor changes
+* The Endpoint address that support CNAME and IP formats
+* Rearrange the sample file organization structure and use function to organize the function points
+* Add an interface that sets the connection timeout and requests timeout
+* Remove the outdated interface associated with the Object Group
+* The message in the OssException is changed to English
+
+### Repair problem
+
+* The object name is not complete

+ 21 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/LICENSE.md

@@ -0,0 +1,21 @@
+#The MIT License (MIT)
+
+Copyright (c) ali-sdk and other contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 149 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/README-CN.md

@@ -0,0 +1,149 @@
+# Aliyun OSS SDK for PHP
+
+[![Latest Stable Version](https://poser.pugx.org/aliyuncs/oss-sdk-php/v/stable)](https://packagist.org/packages/aliyuncs/oss-sdk-php)
+[![Build Status](https://travis-ci.org/aliyun/aliyun-oss-php-sdk.svg?branch=master)](https://travis-ci.org/aliyun/aliyun-oss-php-sdk)
+[![Coverage Status](https://coveralls.io/repos/github/aliyun/aliyun-oss-php-sdk/badge.svg?branch=master)](https://coveralls.io/github/aliyun/aliyun-oss-php-sdk?branch=master)
+
+## [README of English](https://github.com/aliyun/aliyun-oss-php-sdk/blob/master/README.md)
+
+## 概述
+
+阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。用户可以通过调用API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过用户Web控制台对数据进行简单的管理。OSS适合存放任意文件类型,适合各种网站、开发企业及开发者使用。
+
+
+## 运行环境
+- PHP 5.3+
+- cURL extension
+
+提示:
+
+- Ubuntu下可以使用apt-get包管理器安装php的cURL扩展 `sudo apt-get install php5-curl`
+
+## 安装方法
+
+1. 如果您通过composer管理您的项目依赖,可以在你的项目根目录运行:
+
+        $ composer require aliyuncs/oss-sdk-php
+
+   或者在你的`composer.json`中声明对Aliyun OSS SDK for PHP的依赖:
+
+        "require": {
+            "aliyuncs/oss-sdk-php": "~2.0"
+        }
+
+   然后通过`composer install`安装依赖。composer安装完成后,在您的PHP代码中引入依赖即可:
+
+        require_once __DIR__ . '/vendor/autoload.php';
+
+2. 您也可以直接下载已经打包好的[phar文件][releases-page],然后在你
+   的代码中引入这个文件即可:
+
+        require_once '/path/to/oss-sdk-php.phar';
+
+3. 下载SDK源码,在您的代码中引入SDK目录下的`autoload.php`文件:
+
+        require_once '/path/to/oss-sdk/autoload.php';
+
+## 快速使用
+
+### 常用类
+
+| 类名 | 解释 |
+|:------------------|:------------------------------------|
+|OSS\OssClient | OSS客户端类,用户通过OssClient的实例调用接口 |
+|OSS\Core\OssException | OSS异常类,用户在使用的过程中,只需要注意这个异常|
+
+### OssClient初始化
+
+SDK的OSS操作通过OssClient类完成的,下面代码创建一个OssClient对象:
+
+```php
+<?php
+$accessKeyId = "<您从OSS获得的AccessKeyId>"; ;
+$accessKeySecret = "<您从OSS获得的AccessKeySecret>";
+$endpoint = "<您选定的OSS数据中心访问域名,例如oss-cn-hangzhou.aliyuncs.com>";
+try {
+    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
+} catch (OssException $e) {
+    print $e->getMessage();
+}
+```
+
+### 文件操作
+
+文件(又称对象,Object)是OSS中最基本的数据单元,您可以把它简单地理解为文件,用下面代码可以实现一个Object的上传:
+
+```php
+<?php
+$bucket = "<您使用的Bucket名字,注意命名规范>";
+$object = "<您使用的Object名字,注意命名规范>";
+$content = "Hello, OSS!"; // 上传的文件内容
+try {
+    $ossClient->putObject($bucket, $object, $content);
+} catch (OssException $e) {
+    print $e->getMessage();
+}
+```
+
+### 存储空间操作
+
+存储空间(又称Bucket)是一个用户用来管理所存储Object的存储空间,对于用户来说是一个管理Object的单元,所有的Object都必须隶属于某个Bucket。您可以按照下面的代码新建一个Bucket:
+
+```php
+<?php
+$bucket = "<您使用的Bucket名字,注意命名规范>";
+try {
+    $ossClient->createBucket($bucket);
+} catch (OssException $e) {
+    print $e->getMessage();
+}
+```
+
+### 返回结果处理
+
+OssClient提供的接口返回返回数据分为两种:
+
+* Put,Delete类接口,接口返回null,如果没有OssException,即可认为操作成功
+* Get,List类接口,接口返回对应的数据,如果没有OssException,即可认为操作成功,举个例子:
+
+```php
+<?php
+$bucketListInfo = $ossClient->listBuckets();
+$bucketList = $bucketListInfo->getBucketList();
+foreach($bucketList as $bucket) {
+    print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreateDate() . "\n");
+}
+```
+上面代码中的$bucketListInfo的数据类型是 `OSS\Model\BucketListInfo`
+
+
+### 运行Sample程序
+
+1. 修改 `samples/Config.php`, 补充配置信息
+2. 执行 `cd samples/ && php RunAll.php`
+
+### 运行单元测试
+
+1. 执行`composer install`下载依赖的库
+2. 设置环境变量
+
+        export OSS_ACCESS_KEY_ID=access-key-id
+        export OSS_ACCESS_KEY_SECRET=access-key-secret
+        export OSS_ENDPOINT=endpoint
+        export OSS_BUCKET=bucket-name
+
+3. 执行 `php vendor/bin/phpunit`
+
+## License
+
+- MIT
+
+## 联系我们
+
+- [阿里云OSS官方网站](http://oss.aliyun.com)
+- [阿里云OSS官方论坛](http://bbs.aliyun.com)
+- [阿里云OSS官方文档中心](http://www.aliyun.com/product/oss#Docs)
+- 阿里云官方技术支持:[提交工单](https://workorder.console.aliyun.com/#/ticket/createIndex)
+
+[releases-page]: https://github.com/aliyun/aliyun-oss-php-sdk/releases
+[phar-composer]: https://github.com/clue/phar-composer

+ 150 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/README.md

@@ -0,0 +1,150 @@
+# Alibaba Cloud OSS SDK for PHP
+
+[![Latest Stable Version](https://poser.pugx.org/aliyuncs/oss-sdk-php/v/stable)](https://packagist.org/packages/aliyuncs/oss-sdk-php)
+[![Build Status](https://travis-ci.org/aliyun/aliyun-oss-php-sdk.svg?branch=master)](https://travis-ci.org/aliyun/aliyun-oss-php-sdk)
+[![Coverage Status](https://coveralls.io/repos/github/aliyun/aliyun-oss-php-sdk/badge.svg?branch=master)](https://coveralls.io/github/aliyun/aliyun-oss-php-sdk?branch=master)
+
+## [README of Chinese](https://github.com/aliyun/aliyun-oss-php-sdk/blob/master/README-CN.md)
+
+## Overview
+
+Alibaba Cloud Object Storage Service (OSS) is a cloud storage service provided by Alibaba Cloud, featuring a massive capacity, security, a low cost, and high reliability. You can upload and download data on any application anytime and anywhere by calling APIs, and perform simple management of data through the web console. The OSS can store any type of files and therefore applies to various websites, development enterprises and developers.
+
+
+## Run environment
+- PHP 5.3+.
+- cURL extension.
+
+Tips:
+
+- In Ubuntu, you can use the ***apt-get*** package manager to install the *PHP cURL extension*: `sudo apt-get install php5-curl`.
+
+## Install OSS PHP SDK
+
+- If you use the ***composer*** to manage project dependencies, run the following command in your project's root directory:
+
+        composer require aliyuncs/oss-sdk-php
+
+   You can also declare the dependency on Alibaba Cloud OSS SDK for PHP in the `composer.json` file.
+
+        "require": {
+            "aliyuncs/oss-sdk-php": "~2.0"
+        }
+
+   Then run `composer install` to install the dependency. After the Composer Dependency Manager is installed, import the dependency in your PHP code: 
+
+        require_once __DIR__ . '/vendor/autoload.php';
+
+- You can also directly download the packaged [PHAR File][releases-page], and 
+   introduce the file to your code: 
+
+        require_once '/path/to/oss-sdk-php.phar';
+
+- Download the SDK source code, and introduce the `autoload.php` file under the SDK directory to your code: 
+
+        require_once '/path/to/oss-sdk/autoload.php';
+
+## Quick use
+
+### Common classes
+
+| Class | Explanation |
+|:------------------|:------------------------------------|
+|OSS\OssClient | OSS client class. An OssClient instance can be used to call the interface.  |
+|OSS\Core\OssException |OSS Exception class . You only need to pay attention to this exception when you use the OssClient. |
+
+### Initialize an OssClient
+
+The SDK's operations for the OSS are performed through the OssClient class. The code below creates an OssClient object:
+
+```php
+<?php
+$accessKeyId = "<AccessKeyID that you obtain from OSS>";
+$accessKeySecret = "<AccessKeySecret that you obtain from OSS>";
+$endpoint = "<Domain that you select to access an OSS data center, such as "oss-cn-hangzhou.aliyuncs.com>";
+try {
+    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
+} catch (OssException $e) {
+    print $e->getMessage();
+}
+```
+
+### Operations on objects
+
+Objects are the most basic data units on the OSS. You can simply consider objects as files. The following code uploads an object:
+
+```php
+<?php
+$bucket= "<Name of the bucket in use. Pay attention to naming conventions>";
+$object = "<Name of the object in use. Pay attention to naming conventions>";
+$content = "Hello, OSS!"; // Content of the uploaded file
+try {
+    $ossClient->putObject($bucket, $object, $content);
+} catch (OssException $e) {
+    print $e->getMessage();
+}
+```
+
+### Operations on buckets
+
+Buckets are the space that you use to manage the stored objects. It is an object management unit for users. Each object must belong to a bucket. You can create a bucket with the following code:
+
+```php
+<?php
+$bucket= "<Name of the bucket in use. Pay attention to naming conventions>";
+try {
+    $ossClient->createBucket($bucket);
+} catch (OssException $e) {
+    print $e->getMessage();
+}
+```
+
+### Handle returned results
+
+The OssClient provides the following two types of returned data from interfaces:
+
+- Put and Delete interfaces: The *PUT* and *DELETE* operations are deemed successful if *null* is returned by the interfaces without *OSSException*.
+- Get and List interfaces: The *GET* and *LIST* operations are deemed successful if the desired data is returned by the interfaces without *OSSException*. For example, 
+
+    ```php
+    <?php
+    $bucketListInfo = $ossClient->listBuckets();
+    $bucketList = $bucketListInfo->getBucketList();
+    foreach($bucketList as $bucket) {
+        print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreateDate() . "\n");
+    }
+    ```
+In the above code, $bucketListInfo falls into the 'OSS\Model\BucketListInfo' data type.
+
+
+### Run a sample project
+
+- Modify `samples/Config.php` to complete the configuration information. 
+- Run `cd samples/ && php RunAll.php`. 
+
+### Run a unit test
+
+- Run `composer install` to download the dependent libraries. 
+- Set the environment variable. 
+
+        export OSS_ACCESS_KEY_ID=access-key-id
+        export OSS_ACCESS_KEY_SECRET=access-key-secret
+        export OSS_ENDPOINT=endpoint
+        export OSS_BUCKET=bucket-name
+
+- Run `php vendor/bin/phpunit`
+
+## License
+
+- MIT
+
+## Contact us
+
+- [Alibaba Cloud OSS official website](http://oss.aliyun.com).
+- [Alibaba Cloud OSS official forum](http://bbs.aliyun.com).
+- [Alibaba Cloud OSS official documentation center](http://www.aliyun.com/product/oss#Docs).
+- Alibaba Cloud official technical support: [Submit a ticket](https://workorder.console.aliyun.com/#/ticket/createIndex).
+
+[releases-page]: https://github.com/aliyun/aliyun-oss-php-sdk/releases
+[phar-composer]: https://github.com/clue/phar-composer
+

+ 11 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/autoload.php

@@ -0,0 +1,11 @@
+<?php
+
+function classLoader($class)
+{
+    $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
+    $file = __DIR__ . DIRECTORY_SEPARATOR .'src'. DIRECTORY_SEPARATOR . $path . '.php';
+    if (file_exists($file)) {
+        require_once $file;
+    }
+}
+spl_autoload_register('classLoader');

+ 13 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/build-phar.sh

@@ -0,0 +1,13 @@
+#! /usr/bin/env bash
+
+# Remove dev deps to reduce phar size
+rm -rf composer.lock vendor/
+
+# Generate composer.lock
+composer install --no-dev
+
+# Find SDK version
+version=$(grep 'const OSS_VERSION' src/OSS/OssClient.php | grep -oE '[0-9.]+')
+
+# Build phar
+phar-composer build . aliyun-oss-php-sdk-$version.phar

+ 24 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/composer.json

@@ -0,0 +1,24 @@
+{
+    "name": "aliyuncs/oss-sdk-php",
+    "description": "Aliyun OSS SDK for PHP",
+    "homepage": "http://www.aliyun.com/product/oss/",
+    "type": "library",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Aliyuncs",
+            "homepage": "http://www.aliyun.com"
+        }
+    ],
+    "require": {
+        "php":">=5.3"
+    },
+    "require-dev" : {
+        "phpunit/phpunit": "*",
+        "satooshi/php-coveralls": "*"
+    },
+    "minimum-stability": "stable",
+    "autoload": {
+        "psr-4": {"OSS\\": "src/OSS"}
+    }
+}

BIN
vendor/voduploadsdk/aliyun-php-sdk-oss/example.jpg


+ 3 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/index.php

@@ -0,0 +1,3 @@
+<?php
+
+require_once __DIR__ . '/vendor/autoload.php';

+ 19 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/phpunit.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xml>
+
+<phpunit>
+	<filter>
+		<whitelist>
+			<directory suffix=".php">./src</directory>
+		</whitelist>
+	</filter>
+	<logging>
+		<log type="coverage-clover" target="coverage.xml" />
+	</logging>
+	<testsuites>
+		<testsuite name="FunctionTest">
+			<directory>./tests</directory>
+			<exclude>./tests/OSS/Tests/BucketCnameTest.php</exclude>
+		</testsuite>
+	</testsuites>
+</phpunit>

+ 168 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Bucket.php

@@ -0,0 +1,168 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+// Create a bucket
+$ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
+Common::println("bucket $bucket created");
+
+// Check whether a bucket exists
+$doesExist = $ossClient->doesBucketExist($bucket);
+Common::println("bucket $bucket exist? " . ($doesExist ? "yes" : "no"));
+
+// Get the bucket list
+$bucketListInfo = $ossClient->listBuckets();
+
+// Set bucket ACL
+$ossClient->putBucketAcl($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
+Common::println("bucket $bucket acl put");
+// Get bucket ACL
+$acl = $ossClient->getBucketAcl($bucket);
+Common::println("bucket $bucket acl get: " . $acl);
+
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+createBucket($ossClient, $bucket);
+doesBucketExist($ossClient, $bucket);
+deleteBucket($ossClient, $bucket);
+putBucketAcl($ossClient, $bucket);
+getBucketAcl($ossClient, $bucket);
+listBuckets($ossClient);
+
+/**
+ * Create a new bucket
+ * acl indicates the access permission of a bucket, including: private, public-read-only/private-read-write, and public read-write.
+ * Private indicates that only the bucket owner or authorized users can access the data..
+ * The three permissions are separately defined by (OssClient::OSS_ACL_TYPE_PRIVATE,OssClient::OSS_ACL_TYPE_PUBLIC_READ, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE)
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function createBucket($ossClient, $bucket)
+{
+    try {
+        $ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Check whether a bucket exists.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ */
+function doesBucketExist($ossClient, $bucket)
+{
+    try {
+        $res = $ossClient->doesBucketExist($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    if ($res === true) {
+        print(__FUNCTION__ . ": OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": FAILED" . "\n");
+    }
+}
+
+/**
+ * Delete a bucket. If the bucket is not empty, the deletion fails.
+ * A bucket which is not empty indicates that it does not contain any objects or parts that are not completely uploaded during multipart upload
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to delete
+ * @return null
+ */
+function deleteBucket($ossClient, $bucket)
+{
+    try {
+        $ossClient->deleteBucket($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Set bucket ACL
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putBucketAcl($ossClient, $bucket)
+{
+    $acl = OssClient::OSS_ACL_TYPE_PRIVATE;
+    try {
+        $ossClient->putBucketAcl($bucket, $acl);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Get bucket ACL
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getBucketAcl($ossClient, $bucket)
+{
+    try {
+        $res = $ossClient->getBucketAcl($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print('acl: ' . $res);
+}
+
+
+/**
+ * List all buckets
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @return null
+ */
+function listBuckets($ossClient)
+{
+    $bucketList = null;
+    try {
+        $bucketListInfo = $ossClient->listBuckets();
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    $bucketList = $bucketListInfo->getBucketList();
+    foreach ($bucketList as $bucket) {
+        print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n");
+    }
+}

+ 108 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketCors.php

@@ -0,0 +1,108 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use OSS\Model\CorsConfig;
+use OSS\Model\CorsRule;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+
+//******************************* Simple usage****************************************************************
+
+// Set cors configuration
+$corsConfig = new CorsConfig();
+$rule = new CorsRule();
+$rule->addAllowedHeader("x-oss-header");
+$rule->addAllowedOrigin("http://www.b.com");
+$rule->addAllowedMethod("POST");
+$rule->setMaxAgeSeconds(10);
+$corsConfig->addRule($rule);
+$ossClient->putBucketCors($bucket, $corsConfig);
+Common::println("bucket $bucket corsConfig created:" . $corsConfig->serializeToXml());
+
+// Get cors configuration
+$corsConfig = $ossClient->getBucketCors($bucket);
+Common::println("bucket $bucket corsConfig fetched:" . $corsConfig->serializeToXml());
+
+// Delete cors configuration
+$ossClient->deleteBucketCors($bucket);
+Common::println("bucket $bucket corsConfig deleted");
+
+//******************************* For complete usage, see the following functions  *****************************************************
+
+putBucketCors($ossClient, $bucket);
+getBucketCors($ossClient, $bucket);
+deleteBucketCors($ossClient, $bucket);
+getBucketCors($ossClient, $bucket);
+
+/**
+ * Set bucket cores
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putBucketCors($ossClient, $bucket)
+{
+    $corsConfig = new CorsConfig();
+    $rule = new CorsRule();
+    $rule->addAllowedHeader("x-oss-header");
+    $rule->addAllowedOrigin("http://www.b.com");
+    $rule->addAllowedMethod("POST");
+    $rule->setMaxAgeSeconds(10);
+    $corsConfig->addRule($rule);
+
+    try {
+        $ossClient->putBucketCors($bucket, $corsConfig);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get and print the cors configuration of a bucket
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getBucketCors($ossClient, $bucket)
+{
+    $corsConfig = null;
+    try {
+        $corsConfig = $ossClient->getBucketCors($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print($corsConfig->serializeToXml() . "\n");
+}
+
+/**
+ * Delete all cors configuraiton of a bucket
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteBucketCors($ossClient, $bucket)
+{
+    try {
+        $ossClient->deleteBucketCors($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+

+ 109 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketLifecycle.php

@@ -0,0 +1,109 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use OSS\Model\LifecycleAction;
+use OSS\Model\LifecycleConfig;
+use OSS\Model\LifecycleRule;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple Usage *******************************************************
+
+// Set lifecycle configuration
+$lifecycleConfig = new LifecycleConfig();
+$actions = array();
+$actions[] = new LifecycleAction("Expiration", "Days", 3);
+$lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
+$lifecycleConfig->addRule($lifecycleRule);
+$ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
+Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml());
+
+// Get lifecycle configuration
+$lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
+Common::println("bucket $bucket lifecycleConfig fetched:" . $lifecycleConfig->serializeToXml());
+
+// Delete bucket lifecycle configuration
+$ossClient->deleteBucketLifecycle($bucket);
+Common::println("bucket $bucket lifecycleConfig deleted");
+
+
+//***************************** For complete usage, see the following functions  ***********************************************
+
+putBucketLifecycle($ossClient, $bucket);
+getBucketLifecycle($ossClient, $bucket);
+deleteBucketLifecycle($ossClient, $bucket);
+getBucketLifecycle($ossClient, $bucket);
+
+/**
+ * Set bucket lifecycle configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putBucketLifecycle($ossClient, $bucket)
+{
+    $lifecycleConfig = new LifecycleConfig();
+    $actions = array();
+    $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3);
+    $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
+    $lifecycleConfig->addRule($lifecycleRule);
+    $actions = array();
+    $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z');
+    $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions);
+    $lifecycleConfig->addRule($lifecycleRule);
+    try {
+        $ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get bucket lifecycle configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getBucketLifecycle($ossClient, $bucket)
+{
+    $lifecycleConfig = null;
+    try {
+        $lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print($lifecycleConfig->serializeToXml() . "\n");
+}
+
+/**
+ * Delete bucket lifecycle configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteBucketLifecycle($ossClient, $bucket)
+{
+    try {
+        $ossClient->deleteBucketLifecycle($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+

+ 95 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketLogging.php

@@ -0,0 +1,95 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//*******************************Simple Usage ***************************************************************
+
+// Set bucket access logging rules. Access logs are stored under the same bucket with a 'access.log' prefix.
+$ossClient->putBucketLogging($bucket, $bucket, "access.log", array());
+Common::println("bucket $bucket lifecycleConfig created");
+
+// Get bucket access logging rules
+$loggingConfig = $ossClient->getBucketLogging($bucket, array());
+Common::println("bucket $bucket lifecycleConfig fetched:" . $loggingConfig->serializeToXml());
+
+// Delete bucket access logging rules
+$loggingConfig = $ossClient->getBucketLogging($bucket, array());
+Common::println("bucket $bucket lifecycleConfig deleted");
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+putBucketLogging($ossClient, $bucket);
+getBucketLogging($ossClient, $bucket);
+deleteBucketLogging($ossClient, $bucket);
+getBucketLogging($ossClient, $bucket);
+
+/**
+ * Set bucket logging configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putBucketLogging($ossClient, $bucket)
+{
+    $option = array();
+    // Access logs are stored in the same bucket.
+    $targetBucket = $bucket;
+    $targetPrefix = "access.log";
+
+    try {
+        $ossClient->putBucketLogging($bucket, $targetBucket, $targetPrefix, $option);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get bucket logging configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getBucketLogging($ossClient, $bucket)
+{
+    $loggingConfig = null;
+    $options = array();
+    try {
+        $loggingConfig = $ossClient->getBucketLogging($bucket, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print($loggingConfig->serializeToXml() . "\n");
+}
+
+/**
+ * Delete bucket logging configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteBucketLogging($ossClient, $bucket)
+{
+    try {
+        $ossClient->deleteBucketLogging($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}

+ 101 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketReferer.php

@@ -0,0 +1,101 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use \OSS\Model\RefererConfig;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple Usage ****************************************************************
+
+// Set referer whitelist
+$refererConfig = new RefererConfig();
+$refererConfig->setAllowEmptyReferer(true);
+$refererConfig->addReferer("www.aliiyun.com");
+$refererConfig->addReferer("www.aliiyuncs.com");
+$ossClient->putBucketReferer($bucket, $refererConfig);
+Common::println("bucket $bucket refererConfig created:" . $refererConfig->serializeToXml());
+// Get referer whitelist
+$refererConfig = $ossClient->getBucketReferer($bucket);
+Common::println("bucket $bucket refererConfig fetched:" . $refererConfig->serializeToXml());
+
+// Delete referrer whitelist
+$refererConfig = new RefererConfig();
+$ossClient->putBucketReferer($bucket, $refererConfig);
+Common::println("bucket $bucket refererConfig deleted");
+
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+putBucketReferer($ossClient, $bucket);
+getBucketReferer($ossClient, $bucket);
+deleteBucketReferer($ossClient, $bucket);
+getBucketReferer($ossClient, $bucket);
+
+/**
+ * Set bucket referer configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putBucketReferer($ossClient, $bucket)
+{
+    $refererConfig = new RefererConfig();
+    $refererConfig->setAllowEmptyReferer(true);
+    $refererConfig->addReferer("www.aliiyun.com");
+    $refererConfig->addReferer("www.aliiyuncs.com");
+    try {
+        $ossClient->putBucketReferer($bucket, $refererConfig);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get bucket referer configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getBucketReferer($ossClient, $bucket)
+{
+    $refererConfig = null;
+    try {
+        $refererConfig = $ossClient->getBucketReferer($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print($refererConfig->serializeToXml() . "\n");
+}
+
+/**
+ * Delete bucket referer configuration
+ * Referer whitelist cannot be directly deleted. So use a empty one to overwrite it.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteBucketReferer($ossClient, $bucket)
+{
+    $refererConfig = new RefererConfig();
+    try {
+        $ossClient->putBucketReferer($bucket, $refererConfig);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}

+ 92 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/BucketWebsite.php

@@ -0,0 +1,92 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use OSS\Model\WebsiteConfig;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple Usage ***************************************************************
+
+// Set bucket static website configuration
+$websiteConfig = new WebsiteConfig("index.html", "error.html");
+$ossClient->putBucketWebsite($bucket, $websiteConfig);
+Common::println("bucket $bucket websiteConfig created:" . $websiteConfig->serializeToXml());
+
+// Get bucket static website configuration
+$websiteConfig = $ossClient->getBucketWebsite($bucket);
+Common::println("bucket $bucket websiteConfig fetched:" . $websiteConfig->serializeToXml());
+
+// Delete bucket static website configuration
+$ossClient->deleteBucketWebsite($bucket);
+Common::println("bucket $bucket websiteConfig deleted");
+
+//******************************* For complete usage, see the following functions  ****************************************************
+
+putBucketWebsite($ossClient, $bucket);
+getBucketWebsite($ossClient, $bucket);
+deleteBucketWebsite($ossClient, $bucket);
+getBucketWebsite($ossClient, $bucket);
+
+/**
+ * Sets bucket static website configuration
+ *
+ * @param $ossClient OssClient
+ * @param  $bucket string bucket name
+ * @return null
+ */
+function putBucketWebsite($ossClient, $bucket)
+{
+    $websiteConfig = new WebsiteConfig("index.html", "error.html");
+    try {
+        $ossClient->putBucketWebsite($bucket, $websiteConfig);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get bucket static website configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getBucketWebsite($ossClient, $bucket)
+{
+    $websiteConfig = null;
+    try {
+        $websiteConfig = $ossClient->getBucketWebsite($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print($websiteConfig->serializeToXml() . "\n");
+}
+
+/**
+ * Delete bucket static website configuration
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteBucketWebsite($ossClient, $bucket)
+{
+    try {
+        $ossClient->deleteBucketWebsite($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}

+ 83 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Callback.php

@@ -0,0 +1,83 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple Usage ***************************************************************
+
+/**  putObject Upload content to an OSS file using callback.
+  * The callbackurl specifies the server url for the request callback.
+  * The callbackbodytype can be application/json or application/x-www-form-urlencoded,the optional parameters,the default for the application/x - WWW - form - urlencoded
+  * Users can choose not to set OSS_BACK_VAR
+  */
+$url =
+    '{
+        "callbackUrl":"callback.oss-demo.com:23450",
+        "callbackHost":"oss-cn-hangzhou.aliyuncs.com",
+        "callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}",
+         "callbackBodyType":"application/x-www-form-urlencoded"
+
+    }';
+$var = 
+    '{
+        "x:var1":"value1",
+        "x:var2":"值2"
+    }';
+$options = array(OssClient::OSS_CALLBACK => $url,
+                 OssClient::OSS_CALLBACK_VAR => $var
+                );
+$result = $ossClient->putObject($bucket, "b.file", "random content", $options);
+Common::println($result['body']);
+Common::println($result['info']['http_code']);
+
+/**
+  * completeMultipartUpload  Upload content to an OSS file using callback.
+  * callbackurl specifies the server url for the request callback
+  * The callbackbodytype can be application/json or application/x-www-form-urlencoded,the optional parameters,the default for the application/x - WWW - form - urlencoded
+  * Users can choose not to set OSS_BACK_VAR.
+ */
+$object = "multipart-callback-test.txt";
+$copiedObject = "multipart-callback-test.txt.copied";
+$ossClient->putObject($bucket, $copiedObject, file_get_contents(__FILE__));
+
+/**
+  *  step 1. Initialize a block upload event, that is, a multipart upload process to get an upload id
+  */
+$upload_id = $ossClient->initiateMultipartUpload($bucket, $object);
+
+/**
+ * step 2. uploadPartCopy
+ */
+$copyId = 1;
+$eTag = $ossClient->uploadPartCopy($bucket, $copiedObject, $bucket, $object, $copyId, $upload_id);
+$upload_parts[] = array(
+    'PartNumber' => $copyId,
+    'ETag' => $eTag,
+    );
+$listPartsInfo = $ossClient->listParts($bucket, $object, $upload_id);
+
+/**
+ * step 3.
+ */
+$json = 
+    '{
+        "callbackUrl":"callback.oss-demo.com:23450",
+        "callbackHost":"oss-cn-hangzhou.aliyuncs.com",
+        "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}",
+        "callbackBodyType":"application/json"
+    }';
+$var = 
+    '{
+        "x:var1":"value1",
+        "x:var2":"值2"
+    }';
+$options = array(OssClient::OSS_CALLBACK => $json,
+                 OssClient::OSS_CALLBACK_VAR => $var);
+
+$result = $ossClient->completeMultipartUpload($bucket, $object, $upload_id, $upload_parts, $options);
+Common::println($result['body']);
+Common::println($result['info']['http_code']);

+ 84 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Common.php

@@ -0,0 +1,84 @@
+<?php
+
+if (is_file(__DIR__ . '/../autoload.php')) {
+    require_once __DIR__ . '/../autoload.php';
+}
+if (is_file(__DIR__ . '/../vendor/autoload.php')) {
+    require_once __DIR__ . '/../vendor/autoload.php';
+}
+require_once __DIR__ . '/Config.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+/**
+ * Class Common
+ *
+ * The Common class for 【Samples/*.php】 used to obtain OssClient instance and other common functions
+ */
+class Common
+{
+    const endpoint = Config::OSS_ENDPOINT;
+    const accessKeyId = Config::OSS_ACCESS_ID;
+    const accessKeySecret = Config::OSS_ACCESS_KEY;
+    const bucket = Config::OSS_TEST_BUCKET;
+
+    /**
+     * Get an OSSClient instance according to config.
+     *
+     * @return OssClient An OssClient instance
+     */
+    public static function getOssClient()
+    {
+        try {
+            $ossClient = new OssClient(self::accessKeyId, self::accessKeySecret, self::endpoint, false);
+        } catch (OssException $e) {
+            printf(__FUNCTION__ . "creating OssClient instance: FAILED\n");
+            printf($e->getMessage() . "\n");
+            return null;
+        }
+        return $ossClient;
+    }
+
+    public static function getBucketName()
+    {
+        return self::bucket;
+    }
+
+    /**
+     * A tool function which creates a bucket and exists the process if there are exceptions
+     */
+    public static function createBucket()
+    {
+        $ossClient = self::getOssClient();
+        if (is_null($ossClient)) exit(1);
+        $bucket = self::getBucketName();
+        $acl = OssClient::OSS_ACL_TYPE_PUBLIC_READ;
+        try {
+            $ossClient->createBucket($bucket, $acl);
+        } catch (OssException $e) {
+
+            $message = $e->getMessage();
+            if (\OSS\Core\OssUtil::startsWith($message, 'http status: 403')) {
+                echo "Please Check your AccessKeyId and AccessKeySecret" . "\n";
+                exit(0);
+            } elseif (strpos($message, "BucketAlreadyExists") !== false) {
+                echo "Bucket already exists. Please check whether the bucket belongs to you, or it was visited with correct endpoint. " . "\n";
+                exit(0);
+            }
+            printf(__FUNCTION__ . ": FAILED\n");
+            printf($e->getMessage() . "\n");
+            return;
+        }
+        print(__FUNCTION__ . ": OK" . "\n");
+    }
+
+    public static function println($message)
+    {
+        if (!empty($message)) {
+            echo strval($message) . "\n";
+        }
+    }
+}
+
+# Common::createBucket();

+ 15 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Config.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * Class Config
+ *
+ * Make configurations required by the sample.
+ * Users can run RunAll.php which runs all the samples after configuring Endpoint, AccessId, and AccessKey.
+ */
+final class Config
+{
+    const OSS_ACCESS_ID = 'update me';
+    const OSS_ACCESS_KEY = 'update me';
+    const OSS_ENDPOINT = 'update me';
+    const OSS_TEST_BUCKET = 'update me';
+}

+ 87 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Image.php

@@ -0,0 +1,87 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+
+$bucketName = Common::getBucketName();
+$object = "example.jpg";
+$ossClient = Common::getOssClient();
+$download_file = "download.jpg";
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple Usage ***************************************************************
+
+// Upload example.jpg to the specified bucket and rename it to $object.
+$ossClient->uploadFile($bucketName, $object, "example.jpg");
+
+// Image resize
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageResize",$download_file);
+
+// Image crop
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/crop,w_100,h_100,x_100,y_100,r_1", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("iamgeCrop", $download_file);
+
+// Image rotate
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/rotate,90", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageRotate", $download_file);
+
+// Image sharpen
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/sharpen,100", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageSharpen", $download_file);
+
+// Add watermark into a image
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageWatermark", $download_file);
+
+// Image format convertion
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/format,png", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageFormat", $download_file);
+
+// Get image information
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/info", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageInfo", $download_file);
+
+
+/**
+ * Generate a signed url which could be used in browser to access the object. The expiration time is 1 hour.
+ */
+ $timeout = 3600;
+$options = array(
+    OssClient::OSS_PROCESS => "image/resize,m_lfit,h_100,w_100",
+    );
+$signedUrl = $ossClient->signUrl($bucketName, $object, $timeout, "GET", $options);
+Common::println("rtmp url: \n" . $signedUrl);
+
+// Finally delete the $object uploaded.
+$ossClient->deleteObject($bucketName, $object);     
+
+function printImage($func, $imageFile)
+{
+    $array = getimagesize($imageFile);
+    Common::println("$func, image width: " . $array[0]);
+    Common::println("$func, image height: " . $array[1]);
+    Common::println("$func, image type: " . ($array[2] === 2 ? 'jpg' : 'png'));
+    Common::println("$func, image size: " . ceil(sprintf('%u',filesize($imageFile))));
+}

+ 131 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/LiveChannel.php

@@ -0,0 +1,131 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Model\LiveChannelConfig;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple Usage *******************************************************
+
+/**
+ * Create a Live Channel
+ * The live channel's name is test_rtmp_live.
+ * The play url file is named as test.m3u8, which includes 3 ts files.
+ * The time period of each file is 5 seconds.(It is recommneded value only for demo purpose, the actual period depends on the key frame.)
+ *
+ */
+$config = new LiveChannelConfig(array(
+            'description' => 'live channel test',
+            'type' => 'HLS',
+            'fragDuration' => 10,
+            'fragCount' => 5,
+            'playListName' => 'hello.m3u8'
+        ));
+$info = $ossClient->putBucketLiveChannel($bucket, 'test_rtmp_live', $config);
+Common::println("bucket $bucket liveChannel created:\n" . 
+"live channel name: ". $info->getName() . "\n" .
+"live channel description: ". $info->getDescription() . "\n" .
+"publishurls: ". $info->getPublishUrls()[0] . "\n" .
+"playurls: ". $info->getPlayUrls()[0] . "\n");
+
+/**
+  * You can use listBucketLiveChannels to list and manage all existing live channels.
+  * Prefix can be used to filter listed live channels by prefix.
+  * Max_keys indicates the maximum numbers of live channels that can be listed in an iterator at one time. Its value is 1000 in maximum and 100 by default.
+ */
+$list = $ossClient->listBucketLiveChannels($bucket);
+Common::println("bucket $bucket listLiveChannel:\n" . 
+"list live channel prefix: ". $list->getPrefix() . "\n" .
+"list live channel marker: ". $list->getMarker() . "\n" .
+"list live channel maxkey: ". $list->getMaxKeys() . "\n" .
+"list live channel IsTruncated: ". $list->getIsTruncated() . "\n" .
+"list live channel getNextMarker: ". $list->getNextMarker() . "\n");
+
+foreach($list->getChannelList()  as $list)
+{
+    Common::println("bucket $bucket listLiveChannel:\n" . 
+    "list live channel IsTruncated: ". $list->getName() . "\n" .
+    "list live channel Description: ". $list->getDescription() . "\n" .
+    "list live channel Status: ". $list->getStatus() . "\n" .
+    "list live channel getNextMarker: ". $list->getLastModified() . "\n");
+}
+/**
+  * Obtain the play_url (url used for rtmp stream pushing.
+  * If the the bucket is not globally readable and writable,
+  * the url must be signed as shown in the following.) and pulish_url (the url included in the m3u8 file generated in stream pushing) used to push streams.
+ */
+$play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600, array('params' => array('playlistName' => 'playlist.m3u8')));
+Common::println("bucket $bucket rtmp url: \n" . $play_url);
+$play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600);
+Common::println("bucket $bucket rtmp url: \n" . $play_url);
+
+/**
+  * If you want to disable a created live channel (disable the pushing streaming or do not allow stream pushing to an IP address), call putLiveChannelStatus to change the channel status to "Disabled".
+  * If you want to enable a disabled live channel, call PutLiveChannelStatus to chanage the channel status to "Enabled".
+ */
+$resp = $ossClient->putLiveChannelStatus($bucket, "test_rtmp_live", "enabled");
+
+/**
+  * You can callLiveChannelInfo to get the information about a live channel.
+ */
+$info = $ossClient->getLiveChannelInfo($bucket, 'test_rtmp_live');
+Common::println("bucket $bucket LiveChannelInfo:\n" . 
+"live channel info description: ". $info->getDescription() . "\n" .
+"live channel info status: ". $info->getStatus() . "\n" .
+"live channel info type: ". $info->getType() . "\n" .
+"live channel info fragDuration: ". $info->getFragDuration() . "\n" .
+"live channel info fragCount: ". $info->getFragCount() . "\n" .
+"live channel info playListName: ". $info->getPlayListName() . "\n");
+
+/**
+  * Gets the historical pushing streaming records by calling getLiveChannelHistory. Now the max records to return is 10.
+ */
+$history = $ossClient->getLiveChannelHistory($bucket, "test_rtmp_live");
+if (count($history->getLiveRecordList()) != 0)
+{
+    foreach($history->getLiveRecordList() as $recordList)
+    {
+        Common::println("bucket $bucket liveChannelHistory:\n" . 
+        "live channel history startTime: ". $recordList->getStartTime() . "\n" .
+        "live channel history endTime: ". $recordList->getEndTime() . "\n" .
+        "live channel history remoteAddr: ". $recordList->getRemoteAddr() . "\n");
+    }
+}
+
+/**
+  * Get the live channel's status by calling getLiveChannelStatus.
+  * If the live channel is receiving the pushing stream, all attributes in stat_result are valid.
+  * If the live channel is idle or disabled, then the status is idle or Disabled and other attributes have no meaning.
+ */
+$status = $ossClient->getLiveChannelStatus($bucket, "test_rtmp_live");
+Common::println("bucket $bucket listLiveChannel:\n" . 
+"live channel status status: ". $status->getStatus() . "\n" .
+"live channel status ConnectedTime: ". $status->getConnectedTime() . "\n" .
+"live channel status VideoWidth: ". $status->getVideoWidth() . "\n" .
+"live channel status VideoHeight: ". $status->getVideoHeight() . "\n" .
+"live channel status VideoFrameRate: ". $status->getVideoFrameRate() . "\n" .
+"live channel status VideoBandwidth: ". $status->getVideoBandwidth() . "\n" .
+"live channel status VideoCodec: ". $status->getVideoCodec() . "\n" .
+"live channel status AudioBandwidth: ". $status->getAudioBandwidth() . "\n" .
+"live channel status AudioSampleRate: ". $status->getAudioSampleRate() . "\n" .
+"live channel status AdioCodec: ". $status->getAudioCodec() . "\n");
+
+/**
+ * If you want to generate a play url from the ts files generated from pushing streaming, call postVodPlayList.
+ * Specify the start time to 60 seconds before the current time and the end time to the current time, which means that a video of 60 seconds is generated.
+ * The playlist file is specified to “vod_playlist.m3u8”, which means that a palylist file named vod_playlist.m3u8 is created after the interface is called.
+ */
+$current_time = time();
+$ossClient->postVodPlaylist($bucket,
+    "test_rtmp_live", "vod_playlist.m3u8", 
+    array('StartTime' => $current_time - 60, 
+          'EndTime' => $current_time)
+);
+
+/**
+  *  Call delete_live_channel to delete a live channel if it will no longer be in used.
+ */
+$ossClient->deleteBucketLiveChannel($bucket, "test_rtmp_live");

+ 182 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/MultipartUpload.php

@@ -0,0 +1,182 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssUtil;
+use OSS\Core\OssException;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple usage ***************************************************************
+
+/**
+ * See the putObjectByRawAPis usage in complete example to check out basic multipart upload APIs which can be used as resumable upload.
+ */
+
+// Upload a file using the multipart upload interface, which determines to use simple upload or multipart upload based on the file size.
+$ossClient->multiuploadFile($bucket, "file.php", __FILE__, array());
+Common::println("local file " . __FILE__ . " is uploaded to the bucket $bucket, file.php");
+
+
+// Upload local directory's data into target dir
+$ossClient->uploadDir($bucket, "targetdir", __DIR__);
+Common::println("local dir " . __DIR__ . " is uploaded to the bucket $bucket, targetdir/");
+
+
+// List the incomplete multipart uploads
+$listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, array());
+
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+multiuploadFile($ossClient, $bucket);
+putObjectByRawApis($ossClient, $bucket);
+uploadDir($ossClient, $bucket);
+listMultipartUploads($ossClient, $bucket);
+
+/**
+ * Upload files using multipart upload
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function multiuploadFile($ossClient, $bucket)
+{
+    $object = "test/multipart-test.txt";
+    $file = __FILE__;
+    $options = array();
+
+    try {
+        $ossClient->multiuploadFile($bucket, $object, $file, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ":  OK" . "\n");
+}
+
+/**
+ * Use basic multipart upload for file upload.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @throws OssException
+ */
+function putObjectByRawApis($ossClient, $bucket)
+{
+    $object = "test/multipart-test.txt";
+    /**
+     *  step 1. Initialize a block upload event, that is, a multipart upload process to get an upload id
+     */
+    try {
+        $uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": initiateMultipartUpload FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n");
+    /*
+     * step 2. Upload parts
+     */
+    $partSize = 10 * 1024 * 1024;
+    $uploadFile = __FILE__;
+    $uploadFileSize = sprintf('%u',filesize($uploadFile));
+    $pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize);
+    $responseUploadPart = array();
+    $uploadPosition = 0;
+    $isCheckMd5 = true;
+    foreach ($pieces as $i => $piece) {
+        $fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO];
+        $toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1;
+        $upOptions = array(
+            $ossClient::OSS_FILE_UPLOAD => $uploadFile,
+            $ossClient::OSS_PART_NUM => ($i + 1),
+            $ossClient::OSS_SEEK_TO => $fromPos,
+            $ossClient::OSS_LENGTH => $toPos - $fromPos + 1,
+            $ossClient::OSS_CHECK_MD5 => $isCheckMd5,
+        );
+        if ($isCheckMd5) {
+            $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
+            $upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
+        }
+        //2. Upload each part to OSS
+        try {
+            $responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions);
+        } catch (OssException $e) {
+            printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} FAILED\n");
+            printf($e->getMessage() . "\n");
+            return;
+        }
+        printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} OK\n");
+    }
+    $uploadParts = array();
+    foreach ($responseUploadPart as $i => $eTag) {
+        $uploadParts[] = array(
+            'PartNumber' => ($i + 1),
+            'ETag' => $eTag,
+        );
+    }
+    /**
+     * step 3. Complete the upload
+     */
+    try {
+        $ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": completeMultipartUpload FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    printf(__FUNCTION__ . ": completeMultipartUpload OK\n");
+}
+
+/**
+ * Upload by directories
+ *
+ * @param OssClient $ossClient OssClient
+ * @param string $bucket bucket name
+ *
+ */
+function uploadDir($ossClient, $bucket)
+{
+    $localDirectory = ".";
+    $prefix = "samples/codes";
+    try {
+        $ossClient->uploadDir($bucket, $prefix, $localDirectory);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    printf(__FUNCTION__ . ": completeMultipartUpload OK\n");
+}
+
+/**
+ * Get ongoing multipart uploads
+ *
+ * @param $ossClient OssClient
+ * @param $bucket   string
+ */
+function listMultipartUploads($ossClient, $bucket)
+{
+    $options = array(
+        'max-uploads' => 100,
+        'key-marker' => '',
+        'prefix' => '',
+        'upload-id-marker' => ''
+    );
+    try {
+        $listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": listMultipartUploads FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    printf(__FUNCTION__ . ": listMultipartUploads OK\n");
+    $listUploadInfo = $listMultipartUploadInfo->getUploads();
+    var_dump($listUploadInfo);
+}

+ 518 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Object.php

@@ -0,0 +1,518 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+//******************************* Simple usage ***************************************************************
+
+// Upload the in-memory string (hi, oss) to an OSS file
+$result = $ossClient->putObject($bucket, "b.file", "hi, oss");
+Common::println("b.file is created");
+Common::println($result['x-oss-request-id']);
+Common::println($result['etag']);
+Common::println($result['content-md5']);
+Common::println($result['body']);
+
+// Uploads a local file to an OSS file
+$result = $ossClient->uploadFile($bucket, "c.file", __FILE__);
+Common::println("c.file is created");
+Common::println("b.file is created");
+Common::println($result['x-oss-request-id']);
+Common::println($result['etag']);
+Common::println($result['content-md5']);
+Common::println($result['body']);
+
+// Download an oss object as an in-memory variable
+$content = $ossClient->getObject($bucket, "b.file");
+Common::println("b.file is fetched, the content is: " . $content);
+
+// Add a symlink to an object
+$content = $ossClient->putSymlink($bucket, "test-symlink", "b.file");
+Common::println("test-symlink is created");
+Common::println($result['x-oss-request-id']);
+Common::println($result['etag']);
+
+// Get a symlink
+$content = $ossClient->getSymlink($bucket, "test-symlink");
+Common::println("test-symlink refer to : " . $content[OssClient::OSS_SYMLINK_TARGET]);
+
+// Download an object to a local file.
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => "./c.file.localcopy",
+);
+$ossClient->getObject($bucket, "c.file", $options);
+Common::println("b.file is fetched to the local file: c.file.localcopy");
+Common::println("b.file is created");
+
+// Copy an object
+$result = $ossClient->copyObject($bucket, "c.file", $bucket, "c.file.copy");
+Common::println("lastModifiedTime: " . $result[0]);
+Common::println("ETag: " . $result[1]);
+
+// Check whether an object exists
+$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
+Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
+
+// Delete an object
+$result = $ossClient->deleteObject($bucket, "c.file.copy");
+Common::println("c.file.copy is deleted");
+Common::println("b.file is created");
+Common::println($result['x-oss-request-id']);
+
+// Check whether an object exists
+$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
+Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
+
+// Delete multiple objects in batch
+$result = $ossClient->deleteObjects($bucket, array("b.file", "c.file"));
+foreach($result as $object)
+    Common::println($object);
+
+sleep(2);
+unlink("c.file.localcopy");
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+listObjects($ossClient, $bucket);
+listAllObjects($ossClient, $bucket);
+createObjectDir($ossClient, $bucket);
+putObject($ossClient, $bucket);
+uploadFile($ossClient, $bucket);
+getObject($ossClient, $bucket);
+getObjectToLocalFile($ossClient, $bucket);
+copyObject($ossClient, $bucket);
+modifyMetaForObject($ossClient, $bucket);
+getObjectMeta($ossClient, $bucket);
+deleteObject($ossClient, $bucket);
+deleteObjects($ossClient, $bucket);
+doesObjectExist($ossClient, $bucket);
+getSymlink($ossClient, $bucket);
+putSymlink($ossClient, $bucket);
+/**
+ * Create a 'virtual' folder
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function createObjectDir($ossClient, $bucket)
+{
+    try {
+        $ossClient->createObjectDir($bucket, "dir");
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Upload in-memory data to oss
+ *
+ * Simple upload---upload specified in-memory data to an OSS object
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putObject($ossClient, $bucket)
+{
+    $object = "oss-php-sdk-test/upload-test-object-name.txt";
+    $content = file_get_contents(__FILE__);
+    $options = array();
+    try {
+        $ossClient->putObject($bucket, $object, $content, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Uploads a local file to OSS
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function uploadFile($ossClient, $bucket)
+{
+    $object = "oss-php-sdk-test/upload-test-object-name.txt";
+    $filePath = __FILE__;
+    $options = array();
+
+    try {
+        $ossClient->uploadFile($bucket, $object, $filePath, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Lists all files and folders in the bucket. 
+ * Note if there's more items than the max-keys specified, the caller needs to use the nextMarker returned as the value for the next call's maker paramter.
+ * Loop through all the items returned from ListObjects.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function listObjects($ossClient, $bucket)
+{
+    $prefix = 'oss-php-sdk-test/';
+    $delimiter = '/';
+    $nextMarker = '';
+    $maxkeys = 1000;
+    $options = array(
+        'delimiter' => $delimiter,
+        'prefix' => $prefix,
+        'max-keys' => $maxkeys,
+        'marker' => $nextMarker,
+    );
+    try {
+        $listObjectInfo = $ossClient->listObjects($bucket, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    $objectList = $listObjectInfo->getObjectList(); // object list
+    $prefixList = $listObjectInfo->getPrefixList(); // directory list
+    if (!empty($objectList)) {
+        print("objectList:\n");
+        foreach ($objectList as $objectInfo) {
+            print($objectInfo->getKey() . "\n");
+        }
+    }
+    if (!empty($prefixList)) {
+        print("prefixList: \n");
+        foreach ($prefixList as $prefixInfo) {
+            print($prefixInfo->getPrefix() . "\n");
+        }
+    }
+}
+
+/**
+ * Lists all folders and files under the bucket. Use nextMarker repeatedly to get all objects.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function listAllObjects($ossClient, $bucket)
+{
+    // Create dir/obj 'folder' and put some files into it.
+    for ($i = 0; $i < 100; $i += 1) {
+        $ossClient->putObject($bucket, "dir/obj" . strval($i), "hi");
+        $ossClient->createObjectDir($bucket, "dir/obj" . strval($i));
+    }
+
+    $prefix = 'dir/';
+    $delimiter = '/';
+    $nextMarker = '';
+    $maxkeys = 30;
+
+    while (true) {
+        $options = array(
+            'delimiter' => $delimiter,
+            'prefix' => $prefix,
+            'max-keys' => $maxkeys,
+            'marker' => $nextMarker,
+        );
+        var_dump($options);
+        try {
+            $listObjectInfo = $ossClient->listObjects($bucket, $options);
+        } catch (OssException $e) {
+            printf(__FUNCTION__ . ": FAILED\n");
+            printf($e->getMessage() . "\n");
+            return;
+        }
+        // Get the nextMarker, and it would be used as the next call's marker parameter to resume from the last call
+        $nextMarker = $listObjectInfo->getNextMarker();
+        $listObject = $listObjectInfo->getObjectList();
+        $listPrefix = $listObjectInfo->getPrefixList();
+        var_dump(count($listObject));
+        var_dump(count($listPrefix));
+        if ($nextMarker === '') {
+            break;
+        }
+    }
+}
+
+/**
+ * Get the content of an object.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getObject($ossClient, $bucket)
+{
+    $object = "oss-php-sdk-test/upload-test-object-name.txt";
+    $options = array();
+    try {
+        $content = $ossClient->getObject($bucket, $object, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    if (file_get_contents(__FILE__) === $content) {
+        print(__FUNCTION__ . ": FileContent checked OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
+    }
+}
+
+/**
+ * Put symlink
+ *
+ * @param OssClient $ossClient  The Instance of OssClient
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putSymlink($ossClient, $bucket)
+{
+    $symlink = "test-samples-symlink";
+    $object = "test-samples-object";
+    try {
+        $ossClient->putObject($bucket, $object, 'test-content');
+        $ossClient->putSymlink($bucket, $symlink, $object);
+        $content = $ossClient->getObject($bucket, $symlink);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    if ($content == 'test-content') {
+        print(__FUNCTION__ . ": putSymlink checked OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": putSymlink checked FAILED" . "\n");
+    }
+}
+
+/**
+ * Get symlink
+ *
+ * @param OssClient $ossClient  OssClient instance
+ * @param string $bucket  bucket name
+ * @return null
+ */
+function getSymlink($ossClient, $bucket)
+{
+    $symlink = "test-samples-symlink";
+    $object = "test-samples-object";
+    try {
+        $ossClient->putObject($bucket, $object, 'test-content');
+        $ossClient->putSymlink($bucket, $symlink, $object);
+        $content = $ossClient->getSymlink($bucket, $symlink);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    if ($content[OssClient::OSS_SYMLINK_TARGET]) {
+        print(__FUNCTION__ . ": getSymlink checked OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": getSymlink checked FAILED" . "\n");
+    }
+}
+
+/**
+ * Get_object_to_local_file
+ *
+ * Get object
+ * Download object to a specified file.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getObjectToLocalFile($ossClient, $bucket)
+{
+    $object = "oss-php-sdk-test/upload-test-object-name.txt";
+    $localfile = "upload-test-object-name.txt";
+    $options = array(
+        OssClient::OSS_FILE_DOWNLOAD => $localfile,
+    );
+
+    try {
+        $ossClient->getObject($bucket, $object, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");
+    if (file_get_contents($localfile) === file_get_contents(__FILE__)) {
+        print(__FUNCTION__ . ": FileContent checked OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
+    }
+    if (file_exists($localfile)) {
+        unlink($localfile);
+    }
+}
+
+/**
+ * Copy object
+ * When the source object is same as the target one, copy operation will just update the metadata.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function copyObject($ossClient, $bucket)
+{
+    $fromBucket = $bucket;
+    $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
+    $toBucket = $bucket;
+    $toObject = $fromObject . '.copy';
+    $options = array();
+
+    try {
+        $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Update Object Meta
+ * it leverages the feature of copyObject: when the source object is just the target object, the metadata could be updated via copy
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function modifyMetaForObject($ossClient, $bucket)
+{
+    $fromBucket = $bucket;
+    $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
+    $toBucket = $bucket;
+    $toObject = $fromObject;
+    $copyOptions = array(
+        OssClient::OSS_HEADERS => array(
+            'Cache-Control' => 'max-age=60',
+            'Content-Disposition' => 'attachment; filename="xxxxxx"',
+        ),
+    );
+    try {
+        $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get object meta, that is, getObjectMeta
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getObjectMeta($ossClient, $bucket)
+{
+    $object = "oss-php-sdk-test/upload-test-object-name.txt";
+    try {
+        $objectMeta = $ossClient->getObjectMeta($bucket, $object);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    if (isset($objectMeta[strtolower('Content-Disposition')]) &&
+        'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]
+    ) {
+        print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");
+    }
+}
+
+/**
+ * Delete an object
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteObject($ossClient, $bucket)
+{
+    $object = "oss-php-sdk-test/upload-test-object-name.txt";
+    try {
+        $ossClient->deleteObject($bucket, $object);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Delete multiple objects in batch
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteObjects($ossClient, $bucket)
+{
+    $objects = array();
+    $objects[] = "oss-php-sdk-test/upload-test-object-name.txt";
+    $objects[] = "oss-php-sdk-test/upload-test-object-name.txt.copy";
+    try {
+        $ossClient->deleteObjects($bucket, $objects);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Check whether an object exists
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function doesObjectExist($ossClient, $bucket)
+{
+    $object = "oss-php-sdk-test/upload-test-object-name.txt";
+    try {
+        $exist = $ossClient->doesObjectExist($bucket, $object);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    var_dump($exist);
+}
+

+ 13 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/RunAll.php

@@ -0,0 +1,13 @@
+<?php
+
+error_reporting(E_ALL | E_NOTICE);
+
+require_once __DIR__ . '/Bucket.php';
+require_once __DIR__ . '/BucketCors.php';
+require_once __DIR__ . '/BucketLifecycle.php';
+require_once __DIR__ . '/BucketReferer.php';
+require_once __DIR__ . '/BucketLogging.php';
+require_once __DIR__ . '/BucketWebsite.php';
+require_once __DIR__ . '/Signature.php';
+require_once __DIR__ . '/Object1.php';
+require_once __DIR__ . '/MultipartUpload.php';

+ 142 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/samples/Signature.php

@@ -0,0 +1,142 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\Http\RequestCore;
+use OSS\Http\ResponseCore;
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//******************************* Simple Usage ***************************************************************
+
+$ossClient->uploadFile($bucket, "a.file", __FILE__);
+
+// Generate a signed url for getting an object. The URL can be used in browser directly to download the file.
+$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600);
+Common::println($signedUrl);
+
+// Generate the signed url for putting an object. User can use put method with this url to upload a file to "a.file".
+$signedUrl = $ossClient->signUrl($bucket, "a.file", "3600", "PUT");
+Common::println($signedUrl);
+
+// Generate the signed url for putting an object from local file. The url can be used directly to upload the file to "a.file".
+$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600, "PUT", array('Content-Type' => 'txt'));
+Common::println($signedUrl);
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+getSignedUrlForPuttingObject($ossClient, $bucket);
+getSignedUrlForPuttingObjectFromFile($ossClient, $bucket);
+getSignedUrlForGettingObject($ossClient, $bucket);
+
+/**
+ * Generate the signed url for getObject() to control read accesses under private privilege
+ *
+ * @param $ossClient OssClient OssClient instance
+ * @param $bucket string bucket name
+ * @return null
+ */
+function getSignedUrlForGettingObject($ossClient, $bucket)
+{
+    $object = "test/test-signature-test-upload-and-download.txt";
+    $timeout = 3600;
+    try {
+        $signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
+    /**
+     * Use similar code to access the object by url, or use browser to access the object.
+     */
+    $request = new RequestCore($signedUrl);
+    $request->set_method('GET');
+    $request->add_header('Content-Type', '');
+    $request->send_request();
+    $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
+    if ($res->isOK()) {
+        print(__FUNCTION__ . ": OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": FAILED" . "\n");
+    };
+}
+
+/**
+ * Generate the signed url for PutObject to control write accesses under private privilege.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ * @throws OssException
+ */
+function getSignedUrlForPuttingObject($ossClient, $bucket)
+{
+    $object = "test/test-signature-test-upload-and-download.txt";
+    $timeout = 3600;
+    $options = NULL;
+    try {
+        $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT");
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
+    $content = file_get_contents(__FILE__);
+
+    $request = new RequestCore($signedUrl);
+    $request->set_method('PUT');
+    $request->add_header('Content-Type', '');
+    $request->add_header('Content-Length', strlen($content));
+    $request->set_body($content);
+    $request->send_request();
+    $res = new ResponseCore($request->get_response_header(),
+        $request->get_response_body(), $request->get_response_code());
+    if ($res->isOK()) {
+        print(__FUNCTION__ . ": OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": FAILED" . "\n");
+    };
+}
+
+/**
+ * Generate the signed url for PutObject's signed url. User could use the signed url to upload file directly.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @throws OssException
+ */
+function getSignedUrlForPuttingObjectFromFile($ossClient, $bucket)
+{
+    $file = __FILE__;
+    $object = "test/test-signature-test-upload-and-download.txt";
+    $timeout = 3600;
+    $options = array('Content-Type' => 'txt');
+    try {
+        $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
+
+    $request = new RequestCore($signedUrl);
+    $request->set_method('PUT');
+    $request->add_header('Content-Type', 'txt');
+    $request->set_read_file($file);
+    $request->set_read_stream_size(sprintf('%u',filesize($file)));
+    $request->send_request();
+    $res = new ResponseCore($request->get_response_header(),
+        $request->get_response_body(), $request->get_response_code());
+    if ($res->isOK()) {
+        print(__FUNCTION__ . ": OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": FAILED" . "\n");
+    };
+}

+ 263 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/MimeTypes.php

@@ -0,0 +1,263 @@
+<?php
+
+namespace OSS\Core;
+
+/**
+ * Class MimeTypes
+ *
+ * The map of a file's extention name to its corresponding Content-Type value in the file upload request.
+ * If the file extention name is not predefined in this class, getMimetype() returns null.
+ *
+ * @package OSS\Core
+ */
+class MimeTypes
+{
+    /**
+     * Get the content-type value of http header from the file's extension name.
+     *
+     * @param string $name Default file extension name.
+     * @return string content-type
+     */
+    public static function getMimetype($name)
+    {
+        $parts = explode('.', $name);
+        if (count($parts) > 1) {
+            $ext = strtolower(end($parts));
+            if (isset(self::$mime_types[$ext])) {
+                return self::$mime_types[$ext];
+            }
+        }
+
+        return null;
+    }
+
+    private static $mime_types = array(
+        'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+        'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+        'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+        'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+        'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+        'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+        'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+        'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+        'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
+        'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
+        'apk' => 'application/vnd.android.package-archive',
+        'hqx' => 'application/mac-binhex40',
+        'cpt' => 'application/mac-compactpro',
+        'doc' => 'application/msword',
+        'ogg' => 'audio/ogg',
+        'pdf' => 'application/pdf',
+        'rtf' => 'text/rtf',
+        'mif' => 'application/vnd.mif',
+        'xls' => 'application/vnd.ms-excel',
+        'ppt' => 'application/vnd.ms-powerpoint',
+        'odc' => 'application/vnd.oasis.opendocument.chart',
+        'odb' => 'application/vnd.oasis.opendocument.database',
+        'odf' => 'application/vnd.oasis.opendocument.formula',
+        'odg' => 'application/vnd.oasis.opendocument.graphics',
+        'otg' => 'application/vnd.oasis.opendocument.graphics-template',
+        'odi' => 'application/vnd.oasis.opendocument.image',
+        'odp' => 'application/vnd.oasis.opendocument.presentation',
+        'otp' => 'application/vnd.oasis.opendocument.presentation-template',
+        'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
+        'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
+        'odt' => 'application/vnd.oasis.opendocument.text',
+        'odm' => 'application/vnd.oasis.opendocument.text-master',
+        'ott' => 'application/vnd.oasis.opendocument.text-template',
+        'oth' => 'application/vnd.oasis.opendocument.text-web',
+        'sxw' => 'application/vnd.sun.xml.writer',
+        'stw' => 'application/vnd.sun.xml.writer.template',
+        'sxc' => 'application/vnd.sun.xml.calc',
+        'stc' => 'application/vnd.sun.xml.calc.template',
+        'sxd' => 'application/vnd.sun.xml.draw',
+        'std' => 'application/vnd.sun.xml.draw.template',
+        'sxi' => 'application/vnd.sun.xml.impress',
+        'sti' => 'application/vnd.sun.xml.impress.template',
+        'sxg' => 'application/vnd.sun.xml.writer.global',
+        'sxm' => 'application/vnd.sun.xml.math',
+        'sis' => 'application/vnd.symbian.install',
+        'wbxml' => 'application/vnd.wap.wbxml',
+        'wmlc' => 'application/vnd.wap.wmlc',
+        'wmlsc' => 'application/vnd.wap.wmlscriptc',
+        'bcpio' => 'application/x-bcpio',
+        'torrent' => 'application/x-bittorrent',
+        'bz2' => 'application/x-bzip2',
+        'vcd' => 'application/x-cdlink',
+        'pgn' => 'application/x-chess-pgn',
+        'cpio' => 'application/x-cpio',
+        'csh' => 'application/x-csh',
+        'dvi' => 'application/x-dvi',
+        'spl' => 'application/x-futuresplash',
+        'gtar' => 'application/x-gtar',
+        'hdf' => 'application/x-hdf',
+        'jar' => 'application/java-archive',
+        'jnlp' => 'application/x-java-jnlp-file',
+        'js' => 'application/javascript',
+        'json' => 'application/json',
+        'ksp' => 'application/x-kspread',
+        'chrt' => 'application/x-kchart',
+        'kil' => 'application/x-killustrator',
+        'latex' => 'application/x-latex',
+        'rpm' => 'application/x-rpm',
+        'sh' => 'application/x-sh',
+        'shar' => 'application/x-shar',
+        'swf' => 'application/x-shockwave-flash',
+        'sit' => 'application/x-stuffit',
+        'sv4cpio' => 'application/x-sv4cpio',
+        'sv4crc' => 'application/x-sv4crc',
+        'tar' => 'application/x-tar',
+        'tcl' => 'application/x-tcl',
+        'tex' => 'application/x-tex',
+        'man' => 'application/x-troff-man',
+        'me' => 'application/x-troff-me',
+        'ms' => 'application/x-troff-ms',
+        'ustar' => 'application/x-ustar',
+        'src' => 'application/x-wais-source',
+        'zip' => 'application/zip',
+        'm3u' => 'audio/x-mpegurl',
+        'ra' => 'audio/x-pn-realaudio',
+        'wav' => 'audio/x-wav',
+        'wma' => 'audio/x-ms-wma',
+        'wax' => 'audio/x-ms-wax',
+        'pdb' => 'chemical/x-pdb',
+        'xyz' => 'chemical/x-xyz',
+        'bmp' => 'image/bmp',
+        'gif' => 'image/gif',
+        'ief' => 'image/ief',
+        'png' => 'image/png',
+        'wbmp' => 'image/vnd.wap.wbmp',
+        'ras' => 'image/x-cmu-raster',
+        'pnm' => 'image/x-portable-anymap',
+        'pbm' => 'image/x-portable-bitmap',
+        'pgm' => 'image/x-portable-graymap',
+        'ppm' => 'image/x-portable-pixmap',
+        'rgb' => 'image/x-rgb',
+        'xbm' => 'image/x-xbitmap',
+        'xpm' => 'image/x-xpixmap',
+        'xwd' => 'image/x-xwindowdump',
+        'css' => 'text/css',
+        'rtx' => 'text/richtext',
+        'tsv' => 'text/tab-separated-values',
+        'jad' => 'text/vnd.sun.j2me.app-descriptor',
+        'wml' => 'text/vnd.wap.wml',
+        'wmls' => 'text/vnd.wap.wmlscript',
+        'etx' => 'text/x-setext',
+        'mxu' => 'video/vnd.mpegurl',
+        'flv' => 'video/x-flv',
+        'wm' => 'video/x-ms-wm',
+        'wmv' => 'video/x-ms-wmv',
+        'wmx' => 'video/x-ms-wmx',
+        'wvx' => 'video/x-ms-wvx',
+        'avi' => 'video/x-msvideo',
+        'movie' => 'video/x-sgi-movie',
+        'ice' => 'x-conference/x-cooltalk',
+        '3gp' => 'video/3gpp',
+        'ai' => 'application/postscript',
+        'aif' => 'audio/x-aiff',
+        'aifc' => 'audio/x-aiff',
+        'aiff' => 'audio/x-aiff',
+        'asc' => 'text/plain',
+        'atom' => 'application/atom+xml',
+        'au' => 'audio/basic',
+        'bin' => 'application/octet-stream',
+        'cdf' => 'application/x-netcdf',
+        'cgm' => 'image/cgm',
+        'class' => 'application/octet-stream',
+        'dcr' => 'application/x-director',
+        'dif' => 'video/x-dv',
+        'dir' => 'application/x-director',
+        'djv' => 'image/vnd.djvu',
+        'djvu' => 'image/vnd.djvu',
+        'dll' => 'application/octet-stream',
+        'dmg' => 'application/octet-stream',
+        'dms' => 'application/octet-stream',
+        'dtd' => 'application/xml-dtd',
+        'dv' => 'video/x-dv',
+        'dxr' => 'application/x-director',
+        'eps' => 'application/postscript',
+        'exe' => 'application/octet-stream',
+        'ez' => 'application/andrew-inset',
+        'gram' => 'application/srgs',
+        'grxml' => 'application/srgs+xml',
+        'gz' => 'application/x-gzip',
+        'htm' => 'text/html',
+        'html' => 'text/html',
+        'ico' => 'image/x-icon',
+        'ics' => 'text/calendar',
+        'ifb' => 'text/calendar',
+        'iges' => 'model/iges',
+        'igs' => 'model/iges',
+        'jp2' => 'image/jp2',
+        'jpe' => 'image/jpeg',
+        'jpeg' => 'image/jpeg',
+        'jpg' => 'image/jpeg',
+        'kar' => 'audio/midi',
+        'lha' => 'application/octet-stream',
+        'lzh' => 'application/octet-stream',
+        'm4a' => 'audio/mp4a-latm',
+        'm4p' => 'audio/mp4a-latm',
+        'm4u' => 'video/vnd.mpegurl',
+        'm4v' => 'video/x-m4v',
+        'mac' => 'image/x-macpaint',
+        'mathml' => 'application/mathml+xml',
+        'mesh' => 'model/mesh',
+        'mid' => 'audio/midi',
+        'midi' => 'audio/midi',
+        'mov' => 'video/quicktime',
+        'mp2' => 'audio/mpeg',
+        'mp3' => 'audio/mpeg',
+        'mp4' => 'video/mp4',
+        'mpe' => 'video/mpeg',
+        'mpeg' => 'video/mpeg',
+        'mpg' => 'video/mpeg',
+        'mpga' => 'audio/mpeg',
+        'msh' => 'model/mesh',
+        'nc' => 'application/x-netcdf',
+        'oda' => 'application/oda',
+        'ogv' => 'video/ogv',
+        'pct' => 'image/pict',
+        'pic' => 'image/pict',
+        'pict' => 'image/pict',
+        'pnt' => 'image/x-macpaint',
+        'pntg' => 'image/x-macpaint',
+        'ps' => 'application/postscript',
+        'qt' => 'video/quicktime',
+        'qti' => 'image/x-quicktime',
+        'qtif' => 'image/x-quicktime',
+        'ram' => 'audio/x-pn-realaudio',
+        'rdf' => 'application/rdf+xml',
+        'rm' => 'application/vnd.rn-realmedia',
+        'roff' => 'application/x-troff',
+        'sgm' => 'text/sgml',
+        'sgml' => 'text/sgml',
+        'silo' => 'model/mesh',
+        'skd' => 'application/x-koan',
+        'skm' => 'application/x-koan',
+        'skp' => 'application/x-koan',
+        'skt' => 'application/x-koan',
+        'smi' => 'application/smil',
+        'smil' => 'application/smil',
+        'snd' => 'audio/basic',
+        'so' => 'application/octet-stream',
+        'svg' => 'image/svg+xml',
+        't' => 'application/x-troff',
+        'texi' => 'application/x-texinfo',
+        'texinfo' => 'application/x-texinfo',
+        'tif' => 'image/tiff',
+        'tiff' => 'image/tiff',
+        'tr' => 'application/x-troff',
+        'txt' => 'text/plain',
+        'vrml' => 'model/vrml',
+        'vxml' => 'application/voicexml+xml',
+        'webm' => 'video/webm',
+        'webp' => 'image/webp',
+        'wrl' => 'model/vrml',
+        'xht' => 'application/xhtml+xml',
+        'xhtml' => 'application/xhtml+xml',
+        'xml' => 'application/xml',
+        'xsl' => 'application/xml',
+        'xslt' => 'application/xslt+xml',
+        'xul' => 'application/vnd.mozilla.xul+xml',
+    );
+}

+ 54 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/OssException.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace OSS\Core;
+
+/**
+ * Class OssException
+ *
+ * This is the class that OSSClient is expected to thrown, which the caller needs to handle properly.
+ * It has the OSS specific errors which is useful for troubleshooting.
+ *
+ * @package OSS\Core
+ */
+class OssException extends \Exception
+{
+    private $details = array();
+
+    function __construct($details)
+    {
+        if (is_array($details)) {
+            $message = $details['code'] . ': ' . $details['message']
+                     . ' RequestId: ' . $details['request-id'];
+            parent::__construct($message);
+            $this->details = $details;
+        } else {
+            $message = $details;
+            parent::__construct($message);
+        }
+    }
+
+    public function getHTTPStatus()
+    {
+        return isset($this->details['status']) ? $this->details['status'] : '';
+    }
+
+    public function getRequestId()
+    {
+        return isset($this->details['request-id']) ? $this->details['request-id'] : '';
+    }
+
+    public function getErrorCode()
+    {
+        return isset($this->details['code']) ? $this->details['code'] : '';
+    }
+
+    public function getErrorMessage()
+    {
+        return isset($this->details['message']) ? $this->details['message'] : '';
+    }
+
+    public function getDetails()
+    {
+        return isset($this->details['body']) ? $this->details['body'] : '';
+    }
+}

+ 530 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Core/OssUtil.php

@@ -0,0 +1,530 @@
+<?php
+
+namespace OSS\Core;
+
+/**
+ * Class OssUtil
+ *
+ * Oss Util class for OssClient. The caller could use it for formating the result from OssClient.
+ *
+ * @package OSS
+ */
+class OssUtil
+{
+    const OSS_CONTENT = 'content';
+    const OSS_LENGTH = 'length';
+    const OSS_HEADERS = 'headers';
+    const OSS_MAX_OBJECT_GROUP_VALUE = 1000;
+    const OSS_MAX_PART_SIZE = 5368709120; // 5GB
+    const OSS_MID_PART_SIZE = 10485760; // 10MB
+    const OSS_MIN_PART_SIZE = 102400; // 100KB
+
+    /**
+     * Generate query params
+     *
+     * @param array $options: a key-value pair array.
+     * @return string: the key-value list in the format such as key1=value1&key2=value2
+     */
+    public static function toQueryString($options = array())
+    {
+        $temp = array();
+        uksort($options, 'strnatcasecmp');
+        foreach ($options as $key => $value) {
+            if (is_string($key) && !is_array($value)) {
+                $temp[] = rawurlencode($key) . '=' . rawurlencode($value);
+            }
+        }
+        return implode('&', $temp);
+    }
+
+    /**
+     * Html encoding '<', '>', '&', '\', '"' in subject parameter. 
+     *
+     * @param string $subject
+     * @return string
+     */
+    public static function sReplace($subject)
+    {
+        $search = array('<', '>', '&', '\'', '"');
+        $replace = array('&lt;', '&gt;', '&amp;', '&apos;', '&quot;');
+        return str_replace($search, $replace, $subject);
+    }
+
+    /**
+     * Check whether the string includes any chinese character
+     *
+     * @param $str
+     * @return int
+     */
+    public static function chkChinese($str)
+    {
+        return preg_match('/[\x80-\xff]./', $str);
+    }
+
+    /**
+     * Checks if the string is encoded by GB2312.
+     *
+     * @param string $str
+     * @return boolean false UTF-8 encoding  TRUE GB2312 encoding
+     */
+    public static function isGb2312($str)
+    {
+        for ($i = 0; $i < strlen($str); $i++) {
+            $v = ord($str[$i]);
+            if ($v > 127) {
+                if (($v >= 228) && ($v <= 233)) {
+                    if (($i + 2) >= (strlen($str) - 1)) return true;  // not enough characters
+                    $v1 = ord($str[$i + 1]);
+                    $v2 = ord($str[$i + 2]);
+                    if (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191))
+                        return false;
+                    else
+                        return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Checks if the string is encoded by GBK
+     *
+     * @param string $str
+     * @param boolean $gbk
+     * @return boolean
+     */
+    public static function checkChar($str, $gbk = true)
+    {
+        for ($i = 0; $i < strlen($str); $i++) {
+            $v = ord($str[$i]);
+            if ($v > 127) {
+                if (($v >= 228) && ($v <= 233)) {
+                    if (($i + 2) >= (strlen($str) - 1)) return $gbk ? true : FALSE;  // not enough characters
+                    $v1 = ord($str[$i + 1]);
+                    $v2 = ord($str[$i + 2]);
+                    if ($gbk) {
+                        return (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191)) ? FALSE : TRUE;//GBK
+                    } else {
+                        return (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191)) ? TRUE : FALSE;
+                    }
+                }
+            }
+        }
+        return $gbk ? TRUE : FALSE;
+    }
+
+    /**
+     * Checks if the bucket name is valid
+     * bucket naming rules
+     * 1. Can only include lowercase letters, numbers, or dashes
+     * 2. Must start and end with lowercase letters or numbers
+     * 3. Must be within a length from 3 to 63 bytes.
+     *
+     * @param string $bucket Bucket name
+     * @return boolean
+     */
+    public static function validateBucket($bucket)
+    {
+        $pattern = '/^[a-z0-9][a-z0-9-]{2,62}$/';
+        if (!preg_match($pattern, $bucket)) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Checks if object name is valid
+     * object naming rules:
+     * 1. Must be within a length from 1 to 1023 bytes
+     * 2. Cannot start with '/' or '\\'.
+     * 3. Must be encoded in UTF-8.
+     *
+     * @param string $object Object名称
+     * @return boolean
+     */
+    public static function validateObject($object)
+    {
+        $pattern = '/^.{1,1023}$/';
+        if (!preg_match($pattern, $object) ||
+            self::startsWith($object, '/') || self::startsWith($object, '\\')
+        ) {
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * Checks if $str starts with $findMe
+     *
+     * @param string $str
+     * @param string $findMe
+     * @return bool
+     */
+    public static function startsWith($str, $findMe)
+    {
+        if (strpos($str, $findMe) === 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+
+    /**
+     * Generate the xml message of createBucketXmlBody.
+     *
+     * @param string $storageClass
+     * @return string
+     */
+    public static function createBucketXmlBody($storageClass)
+    {
+        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><CreateBucketConfiguration></CreateBucketConfiguration>');
+        $xml->addChild('StorageClass',  $storageClass);
+        return $xml->asXML();
+    }
+
+    /**
+     * validate $options
+     *
+     * @param array $options
+     * @throws OssException
+     * @return boolean
+     */
+    public static function validateOptions($options)
+    {
+        //$options
+        if ($options != NULL && !is_array($options)) {
+            throw new OssException ($options . ':' . 'option must be array');
+        }
+    }
+
+    /**
+     * check whether the Content is valid.
+     *
+     * @param $content string
+     * @throws OssException
+     */
+    public static function validateContent($content)
+    {
+        if (empty($content)) {
+            throw new OssException("http body content is invalid");
+        }
+    }
+
+    /**
+     * Check if BUCKET/OBJECT/OBJECT GROUP is empty.
+     *
+     * @param  string $name
+     * @param  string $errMsg
+     * @throws OssException
+     * @return void
+     */
+    public static function throwOssExceptionWithMessageIfEmpty($name, $errMsg)
+    {
+        if (empty($name)) {
+            if (is_string($name) && $name == '0')
+                return;
+            throw new OssException($errMsg);
+        }
+    }
+
+    /**
+     * This is a method for test only. DO NOT USE.
+     *
+     * @param $filename
+     * @param $size
+     */
+    public static function generateFile($filename, $size)
+    {
+        if (file_exists($filename) && $size == sprintf('%u',filesize($filename))) {
+            echo $filename . " already exists, no need to create again. ";
+            return;
+        }
+        $part_size = 1 * 1024 * 1024;
+        $fp = fopen($filename, "w");
+        $characters = <<<BBB
+0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+BBB;
+
+        $charactersLength = strlen($characters);
+        if ($fp) {
+            while ($size > 0) {
+                if ($size < $part_size) {
+                    $write_size = $size;
+                } else {
+                    $write_size = $part_size;
+                }
+                $size -= $write_size;
+                $a = $characters[rand(0, $charactersLength - 1)];
+                $content = str_repeat($a, $write_size);
+                $flag = fwrite($fp, $content);
+                if (!$flag) {
+                    echo "write to " . $filename . " failed. <br>";
+                    break;
+                }
+            }
+        } else {
+            echo "open " . $filename . " failed. <br>";
+        }
+        fclose($fp);
+    }
+
+    /**
+     * Get MD5 of the file.
+     *
+     * @param $filename
+     * @param $from_pos
+     * @param $to_pos
+     * @return string
+     */
+    public static function getMd5SumForFile($filename, $from_pos, $to_pos)
+    {
+        $content_md5 = "";
+        if (($to_pos - $from_pos) > self::OSS_MAX_PART_SIZE) {
+            return $content_md5;
+        }
+        $filesize = sprintf('%u',filesize($filename));
+        if ($from_pos >= $filesize || $to_pos >= $filesize || $from_pos < 0 || $to_pos < 0) {
+            return $content_md5;
+        }
+
+        $total_length = $to_pos - $from_pos + 1;
+        $buffer = 8192;
+        $left_length = $total_length;
+        if (!file_exists($filename)) {
+            return $content_md5;
+        }
+
+        if (false === $fh = fopen($filename, 'rb')) {
+            return $content_md5;
+        }
+
+        fseek($fh, $from_pos);
+        $data = '';
+        while (!feof($fh)) {
+            if ($left_length >= $buffer) {
+                $read_length = $buffer;
+            } else {
+                $read_length = $left_length;
+            }
+            if ($read_length <= 0) {
+                break;
+            } else {
+                $data .= fread($fh, $read_length);
+                $left_length = $left_length - $read_length;
+            }
+        }
+        fclose($fh);
+        $content_md5 = base64_encode(md5($data, true));
+        return $content_md5;
+    }
+
+    /**
+     * Check if the OS is Windows. The default encoding in Windows is GBK.
+     *
+     * @return bool
+     */
+    public static function isWin()
+    {
+        return strtoupper(substr(PHP_OS, 0, 3)) == "WIN";
+    }
+
+    /**
+     * Encodes the file path from GBK to UTF-8.
+     * The default encoding in Windows is GBK. 
+     * And if the file path is in Chinese, the file would not be found without the transcoding to UTF-8.
+     *
+     * @param $file_path
+     * @return string
+     */
+    public static function encodePath($file_path)
+    {
+        if (self::chkChinese($file_path) && self::isWin()) {
+            $file_path = iconv('utf-8', 'gbk', $file_path);
+        }
+        return $file_path;
+    }
+
+    /**
+     * Check if the endpoint is in the IPv4 format, such as xxx.xxx.xxx.xxx:port or xxx.xxx.xxx.xxx.
+     *
+     * @param string $endpoint The endpoint to check.
+     * @return boolean
+     */
+    public static function isIPFormat($endpoint)
+    {
+        $ip_array = explode(":", $endpoint);
+        $hostname = $ip_array[0];
+        $ret = filter_var($hostname, FILTER_VALIDATE_IP);
+        if (!$ret) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Get the host:port from endpoint.
+     *
+     * @param string $endpoint the endpoint.
+     * @return boolean
+     */
+    public static function getHostPortFromEndpoint($endpoint)
+    {
+        $str = $endpoint;
+        $pos = strpos($str, "://");
+        if ($pos !== false) {
+            $str = substr($str, $pos+3);
+        }
+    
+        $pos = strpos($str, '#');
+        if ($pos !== false) {
+            $str = substr($str, 0, $pos);
+        }
+    
+        $pos = strpos($str, '?');
+        if ($pos !== false) {
+            $str = substr($str, 0, $pos);
+        }
+    
+        $pos = strpos($str, '/');
+        if ($pos !== false) {
+            $str = substr($str, 0, $pos);
+        }
+    
+        $pos = strpos($str, '@');
+        if ($pos !== false) {
+            $str = substr($str, $pos+1);
+        }
+       
+        if (!preg_match('/^[\w.-]+(:[0-9]+)?$/', $str)) {
+            throw new OssException("endpoint is invalid:" . $endpoint);
+        }
+
+        return $str;
+    }
+
+    /**
+     * Generate the xml message of DeleteMultiObjects.
+     *
+     * @param string[] $objects
+     * @param bool $quiet
+     * @return string
+     */
+    public static function createDeleteObjectsXmlBody($objects, $quiet)
+    {
+        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><Delete></Delete>');
+        $xml->addChild('Quiet', $quiet);
+        foreach ($objects as $object) {
+            $sub_object = $xml->addChild('Object');
+            $object = OssUtil::sReplace($object);
+            $sub_object->addChild('Key', $object);
+        }
+        return $xml->asXML();
+    }
+
+    /**
+     * Generate the xml message of DeleteMultiObjects.
+     *
+     * @param DeleteObjectInfo[] $objects
+     * @param bool $quiet
+     * @return string
+     */
+    public static function createDeleteObjectVersionsXmlBody($objects, $quiet)
+    {
+        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><Delete></Delete>');
+        $xml->addChild('Quiet', $quiet);
+        foreach ($objects as $object) {
+            $sub_object = $xml->addChild('Object');
+            $key = OssUtil::sReplace($object->getKey());
+            $sub_object->addChild('Key', $key);
+            $versionId = $object->getVersionId();
+            if (!empty($versionId)) {
+                $sub_object->addChild('VersionId', $object->getVersionId());
+            }
+        }
+        return $xml->asXML();
+    }
+
+    /**
+     * Generate the xml message of CompleteMultipartUpload.
+     *
+     * @param array[] $listParts
+     * @return string
+     */
+    public static function createCompleteMultipartUploadXmlBody($listParts)
+    {
+        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><CompleteMultipartUpload></CompleteMultipartUpload>');
+        foreach ($listParts as $node) {
+            $part = $xml->addChild('Part');
+            $part->addChild('PartNumber', $node['PartNumber']);
+            $part->addChild('ETag', $node['ETag']);
+        }
+        return $xml->asXML();
+    }
+
+    /**
+     * Read the directory, return a associative array in which the MD5 is the named key and the <path,filanme> is the value.
+     *
+     * @param string $dir
+     * @param string $exclude
+     * @param bool $recursive
+     * @return string[]
+     */
+    public static function readDir($dir, $exclude = ".|..|.svn|.git", $recursive = false)
+    {
+        $file_list_array = array();
+        $base_path = $dir;
+        $exclude_array = explode("|", $exclude);
+        $exclude_array = array_unique(array_merge($exclude_array, array('.', '..')));
+
+        if ($recursive) {
+            foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)) as $new_file) {
+                if ($new_file->isDir()) continue;
+                $object = str_replace($base_path, '', $new_file);
+                if (!in_array(strtolower($object), $exclude_array)) {
+                    $object = ltrim($object, '/');
+                    if (is_file($new_file)) {
+                        $key = md5($new_file . $object, false);
+                        $file_list_array[$key] = array('path' => $new_file, 'file' => $object,);
+                    }
+                }
+            }
+        } else if ($handle = opendir($dir)) {
+            while (false !== ($file = readdir($handle))) {
+                if (!in_array(strtolower($file), $exclude_array)) {
+                    $new_file = $dir . '/' . $file;
+                    $object = $file;
+                    $object = ltrim($object, '/');
+                    if (is_file($new_file)) {
+                        $key = md5($new_file . $object, false);
+                        $file_list_array[$key] = array('path' => $new_file, 'file' => $object,);
+                    }
+                }
+            }
+            closedir($handle);
+        }
+        return $file_list_array;
+    }
+
+    /**
+     * Decode key based on the encoding type
+     *
+     * @param string $key
+     * @param string $encoding
+     * @return string
+     */
+    public static function decodeKey($key, $encoding)
+    {
+        if ($encoding == "") {
+            return $key;
+        }
+
+        if ($encoding == "url") {
+            return rawurldecode($key);
+        } else {
+            throw new OssException("Unrecognized encoding type: " . $encoding);
+        }
+    }
+}

+ 25 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/LICENSE

@@ -0,0 +1,25 @@
+Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are
+permitted provided that the following conditions are met:
+
+	* Redistributions of source code must retain the above copyright notice, this list of
+	  conditions and the following disclaimer.
+
+	* Redistributions in binary form must reproduce the above copyright notice, this list
+	  of conditions and the following disclaimer in the documentation and/or other materials
+	  provided with the distribution.
+
+	* Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
+	  endorse or promote products derived from this software without specific prior written
+	  permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.

+ 898 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/RequestCore.php

@@ -0,0 +1,898 @@
+<?php
+namespace OSS\Http;
+
+
+/**
+ * Handle all HTTP requests using cURL and manages the responses.
+ *
+ * @version 2011.06.07
+ * @copyright 2006-2011 Ryan Parman
+ * @copyright 2006-2010 Foleeo Inc.
+ * @copyright 2010-2011 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2011 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ */
+class RequestCore
+{
+    /**
+     * The URL being requested.
+     */
+    public $request_url;
+
+    /**
+     * The headers being sent in the request.
+     */
+    public $request_headers;
+   
+    /**
+     * The raw response callback headers
+     */
+    public $response_raw_headers;
+
+    /**
+     * Response body when error occurs
+     */
+    public $response_error_body;
+
+    /**
+     *The hander of write file
+     */
+    public $write_file_handle; 
+
+    /**
+     * The body being sent in the request.
+     */
+    public $request_body;
+
+    /**
+     * The response returned by the request.
+     */
+    public $response;
+
+    /**
+     * The headers returned by the request.
+     */
+    public $response_headers;
+
+    /**
+     * The body returned by the request.
+     */
+    public $response_body;
+
+    /**
+     * The HTTP status code returned by the request.
+     */
+    public $response_code;
+
+    /**
+     * Additional response data.
+     */
+    public $response_info;
+
+    /**
+     * The method by which the request is being made.
+     */
+    public $method;
+
+    /**
+     * Store the proxy settings to use for the request.
+     */
+    public $proxy = null;
+
+    /**
+     * The username to use for the request.
+     */
+    public $username = null;
+
+    /**
+     * The password to use for the request.
+     */
+    public $password = null;
+
+    /**
+     * Custom CURLOPT settings.
+     */
+    public $curlopts = null;
+
+    /**
+     * The state of debug mode.
+     */
+    public $debug_mode = false;
+
+    /**
+     * The default class to use for HTTP Requests (defaults to <RequestCore>).
+     */
+    public $request_class = 'OSS\Http\RequestCore';
+
+    /**
+     * The default class to use for HTTP Responses (defaults to <ResponseCore>).
+     */
+    public $response_class = 'OSS\Http\ResponseCore';
+
+    /**
+     * Default useragent string to use.
+     */
+    public $useragent = 'RequestCore/1.4.3';
+
+    /**
+     * File to read from while streaming up.
+     */
+    public $read_file = null;
+
+    /**
+     * The resource to read from while streaming up.
+     */
+    public $read_stream = null;
+
+    /**
+     * The size of the stream to read from.
+     */
+    public $read_stream_size = null;
+
+    /**
+     * The length already read from the stream.
+     */
+    public $read_stream_read = 0;
+
+    /**
+     * File to write to while streaming down.
+     */
+    public $write_file = null;
+
+    /**
+     * The resource to write to while streaming down.
+     */
+    public $write_stream = null;
+
+    /**
+     * Stores the intended starting seek position.
+     */
+    public $seek_position = null;
+
+    /**
+     * The location of the cacert.pem file to use.
+     */
+    public $cacert_location = false;
+
+    /**
+     * The state of SSL certificate verification.
+     */
+    public $ssl_verification = true;
+
+    /**
+     * The user-defined callback function to call when a stream is read from.
+     */
+    public $registered_streaming_read_callback = null;
+
+    /**
+     * The user-defined callback function to call when a stream is written to.
+     */
+    public $registered_streaming_write_callback = null;
+
+    /**
+     * The request timeout time, which is 5,184,000 seconds,that is, 6 days by default
+     *
+     * @var int
+     */
+    public $timeout = 5184000;
+
+    /**
+     * The connection timeout time, which is 10 seconds by default
+     *
+     * @var int
+     */
+    public $connect_timeout = 10;
+
+    /*%******************************************************************************************%*/
+    // CONSTANTS
+
+    /**
+     * GET HTTP Method
+     */
+    const HTTP_GET = 'GET';
+
+    /**
+     * POST HTTP Method
+     */
+    const HTTP_POST = 'POST';
+
+    /**
+     * PUT HTTP Method
+     */
+    const HTTP_PUT = 'PUT';
+
+    /**
+     * DELETE HTTP Method
+     */
+    const HTTP_DELETE = 'DELETE';
+
+    /**
+     * HEAD HTTP Method
+     */
+    const HTTP_HEAD = 'HEAD';
+
+
+    /*%******************************************************************************************%*/
+    // CONSTRUCTOR/DESTRUCTOR
+
+    /**
+     * Construct a new instance of this class.
+     *
+     * @param string $url (Optional) The URL to request or service endpoint to query.
+     * @param string $proxy (Optional) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
+     * @param array $helpers (Optional) An associative array of classnames to use for request, and response functionality. Gets passed in automatically by the calling class.
+     * @return $this A reference to the current instance.
+     */
+    public function __construct($url = null, $proxy = null, $helpers = null)
+    {
+        // Set some default values.
+        $this->request_url = $url;
+        $this->method = self::HTTP_GET;
+        $this->request_headers = array();
+        $this->request_body = '';
+
+        // Set a new Request class if one was set.
+        if (isset($helpers['request']) && !empty($helpers['request'])) {
+            $this->request_class = $helpers['request'];
+        }
+
+        // Set a new Request class if one was set.
+        if (isset($helpers['response']) && !empty($helpers['response'])) {
+            $this->response_class = $helpers['response'];
+        }
+
+        if ($proxy) {
+            $this->set_proxy($proxy);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Destruct the instance. Closes opened file handles.
+     *
+     * @return $this A reference to the current instance.
+     */
+    public function __destruct()
+    {
+        if (isset($this->read_file) && isset($this->read_stream)) {
+            fclose($this->read_stream);
+        }
+
+        if (isset($this->write_file) && isset($this->write_stream)) {
+            fclose($this->write_stream);
+        }
+
+        return $this;
+    }
+
+
+    /*%******************************************************************************************%*/
+    // REQUEST METHODS
+
+    /**
+     * Set the credentials to use for authentication.
+     *
+     * @param string $user (Required) The username to authenticate with.
+     * @param string $pass (Required) The password to authenticate with.
+     * @return $this A reference to the current instance.
+     */
+    public function set_credentials($user, $pass)
+    {
+        $this->username = $user;
+        $this->password = $pass;
+        return $this;
+    }
+
+    /**
+     * Add a custom HTTP header to the cURL request.
+     *
+     * @param string $key (Required) The custom HTTP header to set.
+     * @param mixed $value (Required) The value to assign to the custom HTTP header.
+     * @return $this A reference to the current instance.
+     */
+    public function add_header($key, $value)
+    {
+        $this->request_headers[$key] = $value;
+        return $this;
+    }
+
+    /**
+     * Remove an HTTP header from the cURL request.
+     *
+     * @param string $key (Required) The custom HTTP header to set.
+     * @return $this A reference to the current instance.
+     */
+    public function remove_header($key)
+    {
+        if (isset($this->request_headers[$key])) {
+            unset($this->request_headers[$key]);
+        }
+        return $this;
+    }
+
+    /**
+     * Set the method type for the request.
+     *
+     * @param string $method (Required) One of the following constants: <HTTP_GET>, <HTTP_POST>, <HTTP_PUT>, <HTTP_HEAD>, <HTTP_DELETE>.
+     * @return $this A reference to the current instance.
+     */
+    public function set_method($method)
+    {
+        $this->method = strtoupper($method);
+        return $this;
+    }
+
+    /**
+     * Set a custom useragent string for the class.
+     *
+     * @param string $ua (Required) The useragent string to use.
+     * @return $this A reference to the current instance.
+     */
+    public function set_useragent($ua)
+    {
+        $this->useragent = $ua;
+        return $this;
+    }
+
+    /**
+     * Set the body to send in the request.
+     *
+     * @param string $body (Required) The textual content to send along in the body of the request.
+     * @return $this A reference to the current instance.
+     */
+    public function set_body($body)
+    {
+        $this->request_body = $body;
+        return $this;
+    }
+
+    /**
+     * Set the URL to make the request to.
+     *
+     * @param string $url (Required) The URL to make the request to.
+     * @return $this A reference to the current instance.
+     */
+    public function set_request_url($url)
+    {
+        $this->request_url = $url;
+        return $this;
+    }
+
+    /**
+     * Set additional CURLOPT settings. These will merge with the default settings, and override if
+     * there is a duplicate.
+     *
+     * @param array $curlopts (Optional) A set of key-value pairs that set `CURLOPT` options. These will merge with the existing CURLOPTs, and ones passed here will override the defaults. Keys should be the `CURLOPT_*` constants, not strings.
+     * @return $this A reference to the current instance.
+     */
+    public function set_curlopts($curlopts)
+    {
+        $this->curlopts = $curlopts;
+        return $this;
+    }
+
+    /**
+     * Set the length in bytes to read from the stream while streaming up.
+     *
+     * @param integer $size (Required) The length in bytes to read from the stream.
+     * @return $this A reference to the current instance.
+     */
+    public function set_read_stream_size($size)
+    {
+        $this->read_stream_size = $size;
+
+        return $this;
+    }
+
+    /**
+     * Set the resource to read from while streaming up. Reads the stream from its current position until
+     * EOF or `$size` bytes have been read. If `$size` is not given it will be determined by <php:fstat()> and
+     * <php:ftell()>.
+     *
+     * @param resource $resource (Required) The readable resource to read from.
+     * @param integer $size (Optional) The size of the stream to read.
+     * @return $this A reference to the current instance.
+     */
+    public function set_read_stream($resource, $size = null)
+    {
+        if (!isset($size) || $size < 0) {
+            $stats = fstat($resource);
+
+            if ($stats && $stats['size'] >= 0) {
+                $position = ftell($resource);
+
+                if ($position !== false && $position >= 0) {
+                    $size = $stats['size'] - $position;
+                }
+            }
+        }
+
+        $this->read_stream = $resource;
+
+        return $this->set_read_stream_size($size);
+    }
+
+    /**
+     * Set the file to read from while streaming up.
+     *
+     * @param string $location (Required) The readable location to read from.
+     * @return $this A reference to the current instance.
+     */
+    public function set_read_file($location)
+    {
+        $this->read_file = $location;
+        $read_file_handle = fopen($location, 'r');
+
+        return $this->set_read_stream($read_file_handle);
+    }
+
+    /**
+     * Set the resource to write to while streaming down.
+     *
+     * @param resource $resource (Required) The writeable resource to write to.
+     * @return $this A reference to the current instance.
+     */
+    public function set_write_stream($resource)
+    {
+        $this->write_stream = $resource;
+
+        return $this;
+    }
+
+    /**
+     * Set the file to write to while streaming down.
+     *
+     * @param string $location (Required) The writeable location to write to.
+     * @return $this A reference to the current instance.
+     */
+    public function set_write_file($location)
+    {
+        $this->write_file = $location;
+    }
+
+    /**
+     * Set the proxy to use for making requests.
+     *
+     * @param string $proxy (Required) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
+     * @return $this A reference to the current instance.
+     */
+    public function set_proxy($proxy)
+    {
+        $proxy = parse_url($proxy);
+        $proxy['user'] = isset($proxy['user']) ? $proxy['user'] : null;
+        $proxy['pass'] = isset($proxy['pass']) ? $proxy['pass'] : null;
+        $proxy['port'] = isset($proxy['port']) ? $proxy['port'] : null;
+        $this->proxy = $proxy;
+        return $this;
+    }
+
+    /**
+     * Set the intended starting seek position.
+     *
+     * @param integer $position (Required) The byte-position of the stream to begin reading from.
+     * @return $this A reference to the current instance.
+     */
+    public function set_seek_position($position)
+    {
+        $this->seek_position = isset($position) ? (integer)$position : null;
+
+        return $this;
+    }
+
+    /**
+     * A callback function that is invoked by cURL for streaming up.
+     *
+     * @param resource $curl_handle (Required) The cURL handle for the request.
+     * @param resource $header_content (Required) The header callback result.
+     * @return headers from a stream.
+     */
+   public function streaming_header_callback($curl_handle, $header_content)
+   {
+        $code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
+
+        if (isset($this->write_file) && intval($code) / 100 == 2 && !isset($this->write_file_handle))
+        {
+            $this->write_file_handle = fopen($this->write_file, 'w');
+            $this->set_write_stream($this->write_file_handle);
+        }
+
+        $this->response_raw_headers .= $header_content;
+        return strlen($header_content); 
+    }
+        
+
+    /**
+     * Register a callback function to execute whenever a data stream is read from using
+     * <CFRequest::streaming_read_callback()>.
+     *
+     * The user-defined callback function should accept three arguments:
+     *
+     * <ul>
+     *    <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
+     *    <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
+     *    <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
+     * </ul>
+     *
+     * @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
+     *    <li>The name of a global function to execute, passed as a string.</li>
+     *    <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
+     *    <li>An anonymous function (PHP 5.3+).</li></ul>
+     * @return $this A reference to the current instance.
+     */
+    public function register_streaming_read_callback($callback)
+    {
+        $this->registered_streaming_read_callback = $callback;
+
+        return $this;
+    }
+
+    /**
+     * Register a callback function to execute whenever a data stream is written to using
+     * <CFRequest::streaming_write_callback()>.
+     *
+     * The user-defined callback function should accept two arguments:
+     *
+     * <ul>
+     *    <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
+     *    <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
+     * </ul>
+     *
+     * @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
+     *    <li>The name of a global function to execute, passed as a string.</li>
+     *    <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
+     *    <li>An anonymous function (PHP 5.3+).</li></ul>
+     * @return $this A reference to the current instance.
+     */
+    public function register_streaming_write_callback($callback)
+    {
+        $this->registered_streaming_write_callback = $callback;
+
+        return $this;
+    }
+
+
+    /*%******************************************************************************************%*/
+    // PREPARE, SEND, AND PROCESS REQUEST
+
+    /**
+     * A callback function that is invoked by cURL for streaming up.
+     *
+     * @param resource $curl_handle (Required) The cURL handle for the request.
+     * @param resource $file_handle (Required) The open file handle resource.
+     * @param integer $length (Required) The maximum number of bytes to read.
+     * @return binary Binary data from a stream.
+     */
+    public function streaming_read_callback($curl_handle, $file_handle, $length)
+    {
+        // Once we've sent as much as we're supposed to send...
+        if ($this->read_stream_read >= $this->read_stream_size) {
+            // Send EOF
+            return '';
+        }
+
+        // If we're at the beginning of an upload and need to seek...
+        if ($this->read_stream_read == 0 && isset($this->seek_position) && $this->seek_position !== ftell($this->read_stream)) {
+            if (fseek($this->read_stream, $this->seek_position) !== 0) {
+                throw new RequestCore_Exception('The stream does not support seeking and is either not at the requested position or the position is unknown.');
+            }
+        }
+
+        $read = fread($this->read_stream, min($this->read_stream_size - $this->read_stream_read, $length)); // Remaining upload data or cURL's requested chunk size
+        $this->read_stream_read += strlen($read);
+
+        $out = $read === false ? '' : $read;
+
+        // Execute callback function
+        if ($this->registered_streaming_read_callback) {
+            call_user_func($this->registered_streaming_read_callback, $curl_handle, $file_handle, $out);
+        }
+
+        return $out;
+    }
+
+    /**
+     * A callback function that is invoked by cURL for streaming down.
+     *
+     * @param resource $curl_handle (Required) The cURL handle for the request.
+     * @param binary $data (Required) The data to write.
+     * @return integer The number of bytes written.
+     */
+    public function streaming_write_callback($curl_handle, $data)
+    {
+        $code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
+        
+        if (intval($code) / 100 != 2)
+        {
+            $this->response_error_body .= $data;
+            return strlen($data);
+        }
+
+        $length = strlen($data);
+        $written_total = 0;
+        $written_last = 0;
+        
+        while ($written_total < $length) {
+            $written_last = fwrite($this->write_stream, substr($data, $written_total));
+
+            if ($written_last === false) {
+                return $written_total;
+            }
+
+            $written_total += $written_last;
+        }
+
+        // Execute callback function
+        if ($this->registered_streaming_write_callback) {
+            call_user_func($this->registered_streaming_write_callback, $curl_handle, $written_total);
+        }
+
+        return $written_total;
+    }
+
+    /**
+     * Prepare and adds the details of the cURL request. This can be passed along to a <php:curl_multi_exec()>
+     * function.
+     *
+     * @return resource The handle for the cURL object.
+     *
+     */
+    public function prep_request()
+    {
+        $curl_handle = curl_init();
+
+        // Set default options.
+        curl_setopt($curl_handle, CURLOPT_URL, $this->request_url);
+        curl_setopt($curl_handle, CURLOPT_FILETIME, true);
+        curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false);
+//		curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
+        curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5);
+        curl_setopt($curl_handle, CURLOPT_HEADER, true);
+        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($curl_handle, CURLOPT_TIMEOUT, $this->timeout);
+        curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, $this->connect_timeout);
+        curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true);
+        curl_setopt($curl_handle, CURLOPT_REFERER, $this->request_url);
+        curl_setopt($curl_handle, CURLOPT_USERAGENT, $this->useragent);
+        curl_setopt($curl_handle, CURLOPT_HEADERFUNCTION, array($this, 'streaming_header_callback'));
+        curl_setopt($curl_handle, CURLOPT_READFUNCTION, array($this, 'streaming_read_callback'));
+
+        // Verification of the SSL cert
+        if ($this->ssl_verification) {
+            curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, true);
+            curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
+        } else {
+            curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false);
+        }
+
+        // chmod the file as 0755
+        if ($this->cacert_location === true) {
+            curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
+        } elseif (is_string($this->cacert_location)) {
+            curl_setopt($curl_handle, CURLOPT_CAINFO, $this->cacert_location);
+        }
+
+        // Debug mode
+        if ($this->debug_mode) {
+            curl_setopt($curl_handle, CURLOPT_VERBOSE, true);
+        }
+
+        // Handle open_basedir & safe mode
+        if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
+            curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
+        }
+
+        // Enable a proxy connection if requested.
+        if ($this->proxy) {
+            $host = $this->proxy['host'];
+            $host .= ($this->proxy['port']) ? ':' . $this->proxy['port'] : '';
+            curl_setopt($curl_handle, CURLOPT_PROXY, $host);
+
+            if (isset($this->proxy['user']) && isset($this->proxy['pass'])) {
+                curl_setopt($curl_handle, CURLOPT_PROXYUSERPWD, $this->proxy['user'] . ':' . $this->proxy['pass']);
+            }
+        }
+
+        // Set credentials for HTTP Basic/Digest Authentication.
+        if ($this->username && $this->password) {
+            curl_setopt($curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
+            curl_setopt($curl_handle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
+        }
+
+        // Handle the encoding if we can.
+        if (extension_loaded('zlib')) {
+            curl_setopt($curl_handle, CURLOPT_ENCODING, '');
+        }
+
+        // Process custom headers
+        if (isset($this->request_headers) && count($this->request_headers)) {
+            $temp_headers = array();
+
+            foreach ($this->request_headers as $k => $v) {
+                $temp_headers[] = $k . ': ' . $v;
+            }
+
+            // fix "Expect: 100-continue"
+            $temp_headers[] = 'Expect:';
+            curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $temp_headers);
+        }
+
+        switch ($this->method) {
+            case self::HTTP_PUT:
+                //unset($this->read_stream);
+                curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT');
+                if (isset($this->read_stream)) {
+                    if (!isset($this->read_stream_size) || $this->read_stream_size < 0) {
+                        throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.');
+                    }
+                    curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size);
+                    curl_setopt($curl_handle, CURLOPT_UPLOAD, true);
+                } else {
+                    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
+                }
+                break;
+
+            case self::HTTP_POST:
+                curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
+                if (isset($this->read_stream)) {
+                    if (!isset($this->read_stream_size) || $this->read_stream_size < 0) {
+                        throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.');
+                    }
+                    curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size);
+                    curl_setopt($curl_handle, CURLOPT_UPLOAD, true);
+                } else {
+                    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
+                }
+                break;
+
+            case self::HTTP_HEAD:
+                curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, self::HTTP_HEAD);
+                curl_setopt($curl_handle, CURLOPT_NOBODY, 1);
+                break;
+
+            default: // Assumed GET
+                curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, $this->method);
+                if (isset($this->write_stream) || isset($this->write_file)) {
+                    curl_setopt($curl_handle, CURLOPT_WRITEFUNCTION, array($this, 'streaming_write_callback'));
+                    curl_setopt($curl_handle, CURLOPT_HEADER, false);
+                } else {
+                    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
+                }
+                break;
+        }
+
+        // Merge in the CURLOPTs
+        if (isset($this->curlopts) && sizeof($this->curlopts) > 0) {
+            foreach ($this->curlopts as $k => $v) {
+                curl_setopt($curl_handle, $k, $v);
+            }
+        }
+
+        return $curl_handle;
+    }
+
+    /**
+     * Take the post-processed cURL data and break it down into useful header/body/info chunks. Uses the
+     * data stored in the `curl_handle` and `response` properties unless replacement data is passed in via
+     * parameters.
+     *
+     * @param resource|\CurlHandle|null|false $curl_handle (Optional) The reference to the already executed cURL request. Receive CurlHandle instance from PHP8.0
+     * @param string $response (Optional) The actual response content itself that needs to be parsed.
+     * @return ResponseCore A <ResponseCore> object containing a parsed HTTP response.
+     */
+    public function process_response($curl_handle = null, $response = null)
+    {
+        // Accept a custom one if it's passed.
+        if ($curl_handle && $response) {
+            $this->response = $response;
+        }
+
+        // As long as this came back as a valid resource or CurlHandle instance...
+        if (is_resource($curl_handle) || (is_object($curl_handle) && get_class($curl_handle) === 'CurlHandle')) {
+            // Determine what's what.
+            $header_size = curl_getinfo($curl_handle, CURLINFO_HEADER_SIZE);
+            $this->response_headers = substr($this->response, 0, $header_size);
+            $this->response_body = substr($this->response, $header_size);
+            $this->response_code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
+            $this->response_info = curl_getinfo($curl_handle);
+            
+            if (intval($this->response_code) / 100 != 2 && isset($this->write_file))
+            {
+                $this->response_headers = $this->response_raw_headers;
+                $this->response_body = $this->response_error_body;
+            }
+
+            // Parse out the headers
+            $this->response_headers = explode("\r\n\r\n", trim($this->response_headers));
+            $this->response_headers = array_pop($this->response_headers);
+            $this->response_headers = explode("\r\n", $this->response_headers);
+            array_shift($this->response_headers);
+
+            // Loop through and split up the headers.
+            $header_assoc = array();
+            foreach ($this->response_headers as $header) {
+                $kv = explode(': ', $header);
+                $header_assoc[strtolower($kv[0])] = isset($kv[1]) ? $kv[1] : '';
+            }
+
+            // Reset the headers to the appropriate property.
+            $this->response_headers = $header_assoc;
+            $this->response_headers['info'] = $this->response_info;
+            $this->response_headers['info']['method'] = $this->method;
+            
+            if ($curl_handle && $response) {
+                return new ResponseCore($this->response_headers, $this->response_body, $this->response_code);
+            }
+        }
+
+        // Return false
+        return false;
+    }
+
+    /**
+     * Send the request, calling necessary utility functions to update built-in properties.
+     *
+     * @param boolean $parse (Optional) Whether to parse the response with ResponseCore or not.
+     * @return string The resulting unparsed data from the request.
+     */
+    public function send_request($parse = false)
+    {
+        set_time_limit(0);
+
+        $curl_handle = $this->prep_request();
+        $this->response = curl_exec($curl_handle);
+
+        if ($this->response === false) {
+            throw new RequestCore_Exception('cURL error: ' . curl_error($curl_handle) . ' (' . curl_errno($curl_handle) . ')');
+        }
+
+        $parsed_response = $this->process_response($curl_handle, $this->response);
+
+        curl_close($curl_handle);
+        unset($curl_handle);
+
+        if ($parse) {
+            return $parsed_response;
+        }
+
+        return $this->response;
+    }
+
+    /*%******************************************************************************************%*/
+    // RESPONSE METHODS
+
+    /**
+     * Get the HTTP response headers from the request.
+     *
+     * @param string $header (Optional) A specific header value to return. Defaults to all headers.
+     * @return string|array All or selected header values.
+     */
+    public function get_response_header($header = null)
+    {
+        if ($header) {
+            return $this->response_headers[strtolower($header)];
+        }
+        return $this->response_headers;
+    }
+
+    /**
+     * Get the HTTP response body from the request.
+     *
+     * @return string The response body.
+     */
+    public function get_response_body()
+    {
+        return $this->response_body;
+    }
+
+    /**
+     * Get the HTTP response code from the request.
+     *
+     * @return string The HTTP response code.
+     */
+    public function get_response_code()
+    {
+        return $this->response_code;
+    }
+}

+ 8 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/RequestCore_Exception.php

@@ -0,0 +1,8 @@
+<?php
+
+namespace OSS\Http;
+
+class RequestCore_Exception extends \Exception
+{
+
+}

+ 56 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Http/ResponseCore.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace OSS\Http;
+
+/**
+ * Container for all response-related methods.
+ */
+class ResponseCore
+{
+    /**
+     * Store the HTTP header information.
+     */
+    public $header;
+
+    /**
+     * Store the SimpleXML response.
+     */
+    public $body;
+
+    /**
+     * Store the HTTP response code.
+     */
+    public $status;
+
+    /**
+     * Construct a new instance of this class.
+     *
+     * @param array $header (Required) Associative array of HTTP headers (typically returned by <RequestCore::get_response_header()>).
+     * @param string $body (Required) XML-formatted response from OSS.
+     * @param integer $status (Optional) HTTP response status code from the request.
+     * @return Mixed Contains an <php:array> `header` property (HTTP headers as an associative array), a <php:SimpleXMLElement> or <php:string> `body` property, and an <php:integer> `status` code.
+     */
+    public function __construct($header, $body, $status = null)
+    {
+        $this->header = $header;
+        $this->body = $body;
+        $this->status = $status;
+
+        return $this;
+    }
+
+    /**
+     * Did we receive the status code we expected?
+     *
+     * @param integer|array $codes (Optional) The status code(s) to expect. Pass an <php:integer> for a single acceptable value, or an <php:array> of integers for multiple acceptable values.
+     * @return boolean Whether we received the expected status code or not.
+     */
+    public function isOK($codes = array(200, 201, 204, 206))
+    {
+        if (is_array($codes)) {
+            return in_array($this->status, $codes);
+        }
+
+        return $this->status === $codes;
+    }
+}

+ 181 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketInfo.php

@@ -0,0 +1,181 @@
+<?php
+
+namespace OSS\Model;
+
+
+/**
+ * Bucket information class. This is the type of element in BucketListInfo's
+ *
+ * Class BucketInfo
+ * @package OSS\Model
+ */
+class BucketInfo
+{
+     /**
+     * BucketInfo constructor.
+     *
+     * @param string $location
+     * @param string $name
+     * @param string $createDate
+     */
+    public function __construct($location = '', $name = '', $createDate = '')
+    {
+        $this->location = $location;
+        $this->createDate = $createDate;
+        $this->name = $name;
+    }
+    
+    /**
+     * Get bucket location
+     *
+     * @return string
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * Get bucket name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Get bucket creation time.
+     *
+     * @return string
+     */
+    public function getCreateDate()
+    {
+        return $this->createDate;
+    }
+
+    /**
+     * Get bucket storage class.
+     *
+     * @return string
+     */
+    public function getStorageClass()
+    {
+        return $this->storageClass;
+    }
+
+     /**
+     * Get bucket extranet endpoint.
+     *
+     * @return string
+     */
+    public function getExtranetEndpoint()
+    {
+        return $this->extranetEndpoint;
+    }
+
+     /**
+     * Get bucket intranet endpoint.
+     *
+     * @return string
+     */
+    public function getIntranetEndpoint()
+    {
+        return $this->intranetEndpoint;
+    }
+
+    /**
+     * Get bucket intranet endpoint.
+     *
+     * @return string
+     */
+    public function getRegion()
+    {
+        return $this->region;
+    }
+    
+
+    /**
+     * Parse bucket information from node.
+     *
+     * @param xml $xml
+     * @throws OssException
+     * @return null
+     */
+    public function parseFromXmlNode($xml)
+    {
+        if (isset($xml->Location)) {
+            $this->location = strval($xml->Location);
+        }
+        if (isset($xml->Name)) {
+            $this->name = strval($xml->Name);
+        }
+        if (isset($xml->CreationDate)) {
+            $this->createDate = strval($xml->CreationDate);
+        }
+        if (isset($xml->StorageClass)) {
+            $this->storageClass = strval($xml->StorageClass);
+        }
+        if (isset($xml->ExtranetEndpoint)) {
+            $this->extranetEndpoint = strval($xml->ExtranetEndpoint);
+        }
+        if (isset($xml->IntranetEndpoint)) {
+            $this->intranetEndpoint = strval($xml->IntranetEndpoint);
+        }
+        if (isset($xml->IntranetEndpoint)) {
+            $this->intranetEndpoint = strval($xml->IntranetEndpoint);
+        }
+        if (isset($xml->Region)) {
+            $this->region = strval($xml->Region);
+        }
+    }
+    
+    /**
+     * bucket region
+     *
+     * @var string
+     */
+    private $location;
+    /**
+     * bucket name
+     *
+     * @var string
+     */
+    private $name;
+
+    /**
+     * bucket creation time
+     *
+     * @var string
+     */
+    private $createDate;
+
+     /**
+     * bucket storage class
+     *
+     * @var string
+     */
+    private $storageClass;
+
+    /**
+     * bucket extranet endpoint
+     *
+     * @var string
+     */
+    private $extranetEndpoint;
+
+    /**
+     * bucket intranet endpoint
+     *
+     * @var string
+     */
+    private $intranetEndpoint;
+
+    /**
+     * bucket region
+     *
+     * @var string
+     */
+    private $region;
+}

+ 39 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketListInfo.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class BucketListInfo
+ *
+ * It's the type of return value of ListBuckets.
+ *
+ * @package OSS\Model
+ */
+class BucketListInfo
+{
+    /**
+     * BucketListInfo constructor.
+     * @param array $bucketList
+     */
+    public function __construct(array $bucketList)
+    {
+        $this->bucketList = $bucketList;
+    }
+
+    /**
+     * Get the BucketInfo list
+     *
+     * @return BucketInfo[]
+     */
+    public function getBucketList()
+    {
+        return $this->bucketList;
+    }
+
+    /**
+     * BucketInfo list
+     *
+     * @var array
+     */
+    private $bucketList = array();
+}

+ 85 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/BucketStat.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace OSS\Model;
+
+
+/**
+ * Bucket stat class.
+ *
+ * Class BucketStat
+ * @package OSS\Model
+ */
+class BucketStat
+{
+    /**
+     * Get storage
+     *
+     * @return int
+     */
+    public function getStorage()
+    {
+        return $this->storage;
+    }
+
+    /**
+     * Get object count
+     *
+     * @return int
+     */
+    public function getObjectCount()
+    {
+        return $this->objectCount;
+    }
+
+    /**
+     * Get multipart upload count.
+     *
+     * @return int
+     */
+    public function getMultipartUploadCount()
+    {
+        return $this->multipartUploadCount;
+    }
+
+    /**
+     * Parse stat from the xml.
+     *
+     * @param string $strXml
+     * @throws OssException
+     * @return null
+     */
+    public function parseFromXml($strXml)
+    {
+        $xml = simplexml_load_string($strXml);
+        if (isset($xml->Storage) ) {
+            $this->storage = intval($xml->Storage);
+        }
+        if (isset($xml->ObjectCount) ) {
+            $this->objectCount = intval($xml->ObjectCount);
+        }
+        if (isset($xml->MultipartUploadCount) ) {
+            $this->multipartUploadCount = intval($xml->MultipartUploadCount);
+        }
+    }
+    
+    /**
+     * current storage
+     *
+     * @var int
+     */
+    private $storage;
+    /**
+     * object count
+     *
+     * @var int
+     */
+    private $objectCount;
+
+    /**
+     * multipart upload count
+     *
+     * @var int
+     */
+    private $multipartUploadCount;
+
+}

+ 99 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CnameConfig.php

@@ -0,0 +1,99 @@
+<?php
+
+namespace OSS\Model;
+
+
+use OSS\Core\OssException;
+
+/**
+ * Class CnameConfig
+ * @package OSS\Model
+ *
+ * TODO: fix link
+ * @link http://help.aliyun.com/document_detail/oss/api-reference/cors/PutBucketcors.html
+ */
+class CnameConfig implements XmlConfig
+{
+    public function __construct()
+    {
+        $this->cnameList = array();
+    }
+
+    /**
+     * @return array
+     * @example
+     *  array(2) {
+     *    [0]=>
+     *    array(3) {
+     *      ["Domain"]=>
+     *      string(11) "www.foo.com"
+     *      ["Status"]=>
+     *      string(7) "enabled"
+     *      ["LastModified"]=>
+     *      string(8) "20150101"
+     *    }
+     *    [1]=>
+     *    array(3) {
+     *      ["Domain"]=>
+     *      string(7) "bar.com"
+     *      ["Status"]=>
+     *      string(8) "disabled"
+     *      ["LastModified"]=>
+     *      string(8) "20160101"
+     *    }
+     *  }
+     */
+    public function getCnames()
+    {
+        return $this->cnameList;
+    }
+
+
+    public function addCname($cname)
+    {
+        if (count($this->cnameList) >= self::OSS_MAX_RULES) {
+            throw new OssException(
+                "num of cname in the config exceeds self::OSS_MAX_RULES: " . strval(self::OSS_MAX_RULES));
+        }
+        $this->cnameList[] = array('Domain' => $cname);
+    }
+
+    public function parseFromXml($strXml)
+    {
+        $xml = simplexml_load_string($strXml);
+        if (!isset($xml->Cname)) return;
+        foreach ($xml->Cname as $entry) {
+            $cname = array();
+            foreach ($entry as $key => $value) {
+                $cname[strval($key)] = strval($value);
+            }
+            $this->cnameList[] = $cname;
+        }
+    }
+
+    public function serializeToXml()
+    {
+        $strXml = <<<EOF
+<?xml version="1.0" encoding="utf-8"?>
+<BucketCnameConfiguration>
+</BucketCnameConfiguration>
+EOF;
+        $xml = new \SimpleXMLElement($strXml);
+        foreach ($this->cnameList as $cname) {
+            $node = $xml->addChild('Cname');
+            foreach ($cname as $key => $value) {
+                $node->addChild($key, $value);
+            }
+        }
+        return $xml->asXML();
+    }
+
+    public function __toString()
+    {
+        return $this->serializeToXml();
+    }
+
+    const OSS_MAX_RULES = 10;
+
+    private $cnameList = array();
+}

+ 113 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CorsConfig.php

@@ -0,0 +1,113 @@
+<?php
+
+namespace OSS\Model;
+
+
+use OSS\Core\OssException;
+
+/**
+ * Class CorsConfig
+ * @package OSS\Model
+ *
+ * @link http://help.aliyun.com/document_detail/oss/api-reference/cors/PutBucketcors.html
+ */
+class CorsConfig implements XmlConfig
+{
+    /**
+     * CorsConfig constructor.
+     */
+    public function __construct()
+    {
+        $this->rules = array();
+    }
+
+    /**
+     * Get CorsRule list
+     *
+     * @return CorsRule[]
+     */
+    public function getRules()
+    {
+        return $this->rules;
+    }
+
+
+    /**
+     * Add a new CorsRule
+     *
+     * @param CorsRule $rule
+     * @throws OssException
+     */
+    public function addRule($rule)
+    {
+        if (count($this->rules) >= self::OSS_MAX_RULES) {
+            throw new OssException("num of rules in the config exceeds self::OSS_MAX_RULES: " . strval(self::OSS_MAX_RULES));
+        }
+        $this->rules[] = $rule;
+    }
+
+    /**
+     * Parse CorsConfig from the xml.
+     *
+     * @param string $strXml
+     * @throws OssException
+     * @return null
+     */
+    public function parseFromXml($strXml)
+    {
+        $xml = simplexml_load_string($strXml);
+        if (!isset($xml->CORSRule)) return;
+        foreach ($xml->CORSRule as $rule) {
+            $corsRule = new CorsRule();
+            foreach ($rule as $key => $value) {
+                if ($key === self::OSS_CORS_ALLOWED_HEADER) {
+                    $corsRule->addAllowedHeader(strval($value));
+                } elseif ($key === self::OSS_CORS_ALLOWED_METHOD) {
+                    $corsRule->addAllowedMethod(strval($value));
+                } elseif ($key === self::OSS_CORS_ALLOWED_ORIGIN) {
+                    $corsRule->addAllowedOrigin(strval($value));
+                } elseif ($key === self::OSS_CORS_EXPOSE_HEADER) {
+                    $corsRule->addExposeHeader(strval($value));
+                } elseif ($key === self::OSS_CORS_MAX_AGE_SECONDS) {
+                    $corsRule->setMaxAgeSeconds(strval($value));
+                }
+            }
+            $this->addRule($corsRule);
+        }
+        return;
+    }
+
+    /**
+     * Serialize the object into xml string.
+     *
+     * @return string
+     */
+    public function serializeToXml()
+    {
+        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><CORSConfiguration></CORSConfiguration>');
+        foreach ($this->rules as $rule) {
+            $xmlRule = $xml->addChild('CORSRule');
+            $rule->appendToXml($xmlRule);
+        }
+        return $xml->asXML();
+    }
+
+    public function __toString()
+    {
+        return $this->serializeToXml();
+    }
+
+    const OSS_CORS_ALLOWED_ORIGIN = 'AllowedOrigin';
+    const OSS_CORS_ALLOWED_METHOD = 'AllowedMethod';
+    const OSS_CORS_ALLOWED_HEADER = 'AllowedHeader';
+    const OSS_CORS_EXPOSE_HEADER = 'ExposeHeader';
+    const OSS_CORS_MAX_AGE_SECONDS = 'MaxAgeSeconds';
+    const OSS_MAX_RULES = 10;
+
+    /**
+     * CorsRule list
+     *
+     * @var CorsRule[]
+     */
+    private $rules = array();
+}

+ 150 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/CorsRule.php

@@ -0,0 +1,150 @@
+<?php
+
+namespace OSS\Model;
+
+use OSS\Core\OssException;
+
+
+/**
+ * Class CorsRule
+ * @package OSS\Model
+ * @link http://help.aliyun.com/document_detail/oss/api-reference/cors/PutBucketcors.html
+ */
+class CorsRule
+{
+    /**
+     * Add an allowedOrigin rule
+     *
+     * @param string $allowedOrigin
+     */
+    public function addAllowedOrigin($allowedOrigin)
+    {
+        if (!empty($allowedOrigin)) {
+            $this->allowedOrigins[] = $allowedOrigin;
+        }
+    }
+
+    /**
+     * Add an allowedMethod rule
+     *
+     * @param string $allowedMethod
+     */
+    public function addAllowedMethod($allowedMethod)
+    {
+        if (!empty($allowedMethod)) {
+            $this->allowedMethods[] = $allowedMethod;
+        }
+    }
+
+    /**
+     * Add an allowedHeader rule
+     *
+     * @param string $allowedHeader
+     */
+    public function addAllowedHeader($allowedHeader)
+    {
+        if (!empty($allowedHeader)) {
+            $this->allowedHeaders[] = $allowedHeader;
+        }
+    }
+
+    /**
+     * Add an exposeHeader rule
+     *
+     * @param string $exposeHeader
+     */
+    public function addExposeHeader($exposeHeader)
+    {
+        if (!empty($exposeHeader)) {
+            $this->exposeHeaders[] = $exposeHeader;
+        }
+    }
+
+    /**
+     * @return int
+     */
+    public function getMaxAgeSeconds()
+    {
+        return $this->maxAgeSeconds;
+    }
+
+    /**
+     * @param int $maxAgeSeconds
+     */
+    public function setMaxAgeSeconds($maxAgeSeconds)
+    {
+        $this->maxAgeSeconds = $maxAgeSeconds;
+    }
+
+    /**
+     * Get the AllowedHeaders list
+     *
+     * @return string[]
+     */
+    public function getAllowedHeaders()
+    {
+        return $this->allowedHeaders;
+    }
+
+    /**
+     * Get the AllowedOrigins list
+     *
+     * @return string[]
+     */
+    public function getAllowedOrigins()
+    {
+        return $this->allowedOrigins;
+    }
+
+    /**
+     * Get the AllowedMethods list
+     *
+     * @return string[]
+     */
+    public function getAllowedMethods()
+    {
+        return $this->allowedMethods;
+    }
+
+    /**
+     * Get the ExposeHeaders list
+     *
+     * @return string[]
+     */
+    public function getExposeHeaders()
+    {
+        return $this->exposeHeaders;
+    }
+
+    /**
+     * Serialize all the rules into the xml represented by parameter $xmlRule
+     *
+     * @param \SimpleXMLElement $xmlRule
+     * @throws OssException
+     */
+    public function appendToXml(&$xmlRule)
+    {
+        if (!isset($this->maxAgeSeconds)) {
+            throw new OssException("maxAgeSeconds is not set in the Rule");
+        }
+        foreach ($this->allowedOrigins as $allowedOrigin) {
+            $xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_ORIGIN, $allowedOrigin);
+        }
+        foreach ($this->allowedMethods as $allowedMethod) {
+            $xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_METHOD, $allowedMethod);
+        }
+        foreach ($this->allowedHeaders as $allowedHeader) {
+            $xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_HEADER, $allowedHeader);
+        }
+        foreach ($this->exposeHeaders as $exposeHeader) {
+            $xmlRule->addChild(CorsConfig::OSS_CORS_EXPOSE_HEADER, $exposeHeader);
+        }
+        $xmlRule->addChild(CorsConfig::OSS_CORS_MAX_AGE_SECONDS, strval($this->maxAgeSeconds));
+    }
+
+    private $allowedHeaders = array();
+    private $allowedOrigins = array();
+    private $allowedMethods = array();
+    private $exposeHeaders = array();
+    private $maxAgeSeconds = null;
+}

+ 65 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeleteMarkerInfo.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ *
+ * Class DeleteMarkerInfo
+ *
+ * @package OSS\Model
+ */
+class DeleteMarkerInfo
+{
+    /**
+     * DeleteMarkerInfo constructor.
+     *
+     * @param string $key
+     * @param string $versionId
+     * @param string $lastModified
+     * @param string $isLatest
+     */
+    public function __construct($key, $versionId, $lastModified, $isLatest)
+    {
+        $this->key = $key;
+        $this->versionId = $versionId;
+        $this->lastModified = $lastModified;
+        $this->isLatest = $isLatest;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getVersionId()
+    {
+        return $this->versionId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getLastModified()
+    {
+        return $this->lastModified;
+    }
+
+    /**
+     * @return string
+     */
+    public function getIsLatest()
+    {
+        return $this->isLatest;
+    }
+
+    private $key = "";
+    private $versionId = "";
+    private $lastModified = "";
+    private $isLatest = "";
+}

+ 41 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeleteObjectInfo.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class DeleteObjectInfo
+ * @package OSS\Model
+ */
+class DeleteObjectInfo
+{
+    /**
+     * DeleteObjectInfo constructor.
+     *
+     * @param string $key
+     * @param string $versionId
+     */
+    public function __construct($key, $versionId = '')
+    {
+        $this->key = $key;
+        $this->versionId = $versionId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getVersionId()
+    {
+        return $this->versionId;
+    }
+    
+    private $key = "";
+    private $versionId = "";
+}

+ 63 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/DeletedObjectInfo.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class DeletedObjectInfo
+ * @package OSS\Model
+ */
+class DeletedObjectInfo
+{
+    /**
+     * DeletedObjectInfo constructor.
+     *
+     * @param string $key
+     * @param string $versionId
+     * @param string $deleteMarker
+     * @param string $deleteMarkerVersionId
+     */
+    public function __construct($key, $versionId, $deleteMarker, $deleteMarkerVersionId)
+    {
+        $this->key = $key;
+        $this->versionId = $versionId;
+        $this->deleteMarker = $deleteMarker;
+        $this->deleteMarkerVersionId = $deleteMarkerVersionId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getVersionId()
+    {
+        return $this->versionId;
+    }
+    
+    /**
+     * @return string
+     */
+    public function getDeleteMarker()
+    {
+        return $this->deleteMarker;
+    }
+
+    /**
+     * @return string
+     */
+    public function getDeleteMarkerVersionId()
+    {
+        return $this->deleteMarkerVersionId;
+    }
+
+    private $key = "";
+    private $versionId = "";
+    private $deleteMarker = "";
+    private $deleteMarkerVersionId = "";
+}

+ 64 - 0
vendor/voduploadsdk/aliyun-php-sdk-oss/src/OSS/Model/ExtendWormConfig.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace OSS\Model;
+
+
+use OSS\Core\OssException;
+
+/**
+ * Class ExtendWormConfig
+ * @package OSS\Model
+ *
+ */
+class ExtendWormConfig implements XmlConfig
+{
+    /**
+     * ExtendWormConfig constructor.
+     * @param null $day
+     */
+    public function __construct($day = null)
+    {
+        $this->day = $day;
+    }
+
+    /**
+     * Parse ExtendWormConfig from the xml.
+     *
+     * @param string $strXml
+     * @throws OssException
+     * @return null
+     */
+    public function parseFromXml($strXml)
+    {
+        throw new OssException("Not implemented.");
+    }
+
+    /**
+     * Serialize the object into xml string.
+     *
+     * @return string
+     */
+    public function serializeToXml()
+    {
+        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><ExtendWormConfiguration></ExtendWormConfiguration>');
+        if (isset($this->day)) {
+            $xml->addChild('RetentionPeriodInDays', $this->day);
+        }
+        return $xml->asXML();
+    }
+
+    public function __toString()
+    {
+        return $this->serializeToXml();
+    }
+
+    /**
+     * @return int
+     */
+    public function getDay()
+    {
+        return $this->day;
+    }
+
+    private $day = 0;
+}

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác