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