using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using COSXML; using COSXML.Auth; using COSXML.Model.Object; using COSXML.Model.Bucket; using COSXML.CosException; using COSXML.Transfer; using COSXML.Model.Tag; namespace VRS.Util { public class CosClient { CosXmlServer cosXml; private string appid; private string region; /// /// 初始化 /// /// appid /// 地域 public CosClient(string _appid, string _region) { appid = _appid; region = _region; //初始化 CosXmlConfig //string appid = "100011070645"; //string region = "ap-guangzhou"; CosXmlConfig config = new CosXmlConfig.Builder() .IsHttps(true) .SetConnectionTimeoutMs(300000)//5分钟,单位:毫秒,默认:45秒 .SetAppid(appid) .SetRegion(region) .SetDebugLog(true) .Build(); QCloudCredentialProvider cosCredentialProvider = null; string secretId = "AKIDWopdBXCgU3QknbvOwHNExTnZXHk8eDLL"; //"云 API 密钥 SecretId"; string secretKey = "tViEcbpSz5vWsADiqk7D3vV3OSZQ0JMD"; //"云 API 密钥 SecretKey"; long durationSecond = 600; //secretKey 有效时长,单位为 秒 cosCredentialProvider = new DefaultQCloudCredentialProvider(secretId, secretKey, durationSecond); //初始化 CosXmlServer cosXml = new CosXmlServer(config, cosCredentialProvider); } /// /// 高级接口上传文件对象 /// /// 存储桶名称 /// 对象键 /// 本地文件路径 /// public ResponseModel UploadFile(string buketName, string key, byte[] file) { try { string bucket = buketName + "-" + appid; //存储桶名称 格式:BucketName-APPID PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, file); //执行请求 PutObjectResult result = cosXml.PutObject(putObjectRequest); if (result.httpCode == 200) { return new ResponseModel { Code = 200, Message = result.eTag }; } else { return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; } } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosClientException: " + clientEx.Message }; } catch (COSXML.CosException.CosServerException serverEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosServerException: " + serverEx.GetInfo() }; } } /// /// 删除文件对象 /// /// 存储桶名称 /// 对象键 /// public ResponseModel DeleteFile(string buketName, string key) { try { string bucket = buketName + "-" + appid; //存储桶名称 格式:BucketName-APPID DeleteObjectRequest request = new DeleteObjectRequest(bucket, key); //执行请求 DeleteObjectResult result = cosXml.DeleteObject(request); if (result.httpCode == 200) { return new ResponseModel { Code = 200, Message = result.httpMessage }; } else { return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; } } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosClientException: " + clientEx.Message }; } catch (COSXML.CosException.CosServerException serverEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosServerException: " + serverEx.GetInfo() }; } } /// /// 高级接口下载文件对象 /// /// 存储桶名称 /// 存储键 /// 本地下载保存路径 /// 本地下载保存文件名称 /// public async Task TransferDownloadObject(string buketName, string key, string localDir, string localFileName) { //.cssg-snippet-body-start:[transfer-download-object] // 初始化 TransferConfig TransferConfig transferConfig = new TransferConfig(); // 初始化 TransferManager TransferManager transferManager = new TransferManager(cosXml, transferConfig); String bucket = buketName + "-" + appid; //存储桶,格式:BucketName-APPID String cosPath = key; //对象在存储桶中的位置标识符,即称对象键 // 下载对象 COSXMLDownloadTask downloadTask = new COSXMLDownloadTask(bucket, cosPath, localDir, localFileName); //downloadTask.progressCallback = delegate (long completed, long total) //{ // Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total)); //}; try { COSXML.Transfer.COSXMLDownloadTask.DownloadTaskResult result = await transferManager.DownloadAsync(downloadTask); if (result.httpCode == 200) { return new ResponseModel { Code = 200, Message = result.eTag }; } else { return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; } } catch (Exception e) { //请求失败 return new ResponseModel { Code = 500, Message = "CosClientException: " + e.Message }; } } /// /// 设置跨域配置 /// /// 存储桶名称 /// 规则的 ID /// 域名多个以,隔开 /// public ResponseModel PutBucketCORS(string buketName, string corsId, string domainName) { try { string bucket = buketName + "-" + appid; //格式:BucketName-APPID PutBucketCORSRequest request = new PutBucketCORSRequest(bucket); //设置跨域访问配置 CORS COSXML.Model.Tag.CORSConfiguration.CORSRule corsRule = new COSXML.Model.Tag.CORSConfiguration.CORSRule(); //corsRule.id = corsId; corsRule.maxAgeSeconds = 5; corsRule.allowedOrigins = new List(); var list = domainName.Split(','); foreach (var item in list) { corsRule.allowedOrigins.Add(item);//域名 } corsRule.allowedMethods = new List(); corsRule.allowedMethods.Add("PUT"); corsRule.allowedMethods.Add("GET"); corsRule.allowedMethods.Add("POST"); corsRule.allowedMethods.Add("DELETE"); corsRule.allowedMethods.Add("HEAD"); corsRule.allowedHeaders = new List(); corsRule.allowedHeaders.Add("*"); //corsRule.exposeHeaders = new List(); //corsRule.exposeHeaders.Add("x-cos-meta-x1"); request.SetCORSRule(corsRule); //执行请求 PutBucketCORSResult result = cosXml.PutBucketCORS(request); if (result.httpCode == 200) { return new ResponseModel { Code = 200, Message = result.httpMessage }; } else { return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; } } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosClientException: " + clientEx.Message }; } catch (COSXML.CosException.CosServerException serverEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosServerException: " + serverEx.GetInfo() }; } } /// /// 查询跨域配置 /// /// 存储桶名称 /// public ResponseModel GetBucketCORS(string buketName) { try { string bucket = buketName + "-" + appid; //格式:BucketName-APPID GetBucketCORSRequest request = new GetBucketCORSRequest(bucket); //执行请求 GetBucketCORSResult result = cosXml.GetBucketCORS(request); if (result.httpCode == 200) { //存储桶的 CORS 配置信息 CORSConfiguration conf = result.corsConfiguration; //请求成功 return new ResponseModel { Code = 200, Message = "成功", data = conf }; } else { return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; } } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosClientException: " + clientEx.Message }; } catch (COSXML.CosException.CosServerException serverEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosServerException: " + serverEx.GetInfo() }; } } /// /// 删除存储桶跨域规则 /// /// 存储桶名称 /// public ResponseModel DeleteBucketCors(string buketName) { try { string bucket = buketName + "-" + appid; //格式:BucketName-APPID DeleteBucketCORSRequest request = new DeleteBucketCORSRequest(bucket); //执行请求 DeleteBucketCORSResult result = cosXml.DeleteBucketCORS(request); //请求成功 return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosClientException: " + clientEx.Message }; } catch (COSXML.CosException.CosServerException serverEx) { //请求失败 return new ResponseModel { Code = 500, Message = "CosServerException: " + serverEx.GetInfo() }; } } ///// ///// 简单上传文件最大支持上传5GB文件 ///// ///// 存储桶名称 ///// 对象键 ///// 本地文件路径 ///// //public ResponseModel UploadFile(string buketName, string key, string srcPath) //{ // try // { // string bucket = buketName + "-" + appid; //存储桶名称 格式:BucketName-APPID // PutObjectRequest request = new PutObjectRequest(bucket, key, srcPath); // //设置进度回调 // request.SetCosProgressCallback(delegate (long completed, long total) // { // Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total)); // }); // //执行请求 // PutObjectResult result = cosXml.PutObject(request); // //result.GetResultInfo() // if (result.httpCode == 200) // { // return new ResponseModel { Code = 200, Message = result.eTag }; // } // else // { // return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; // } // } // catch (CosClientException clientEx) // { // return new ResponseModel { Code = 500, Message = "CosClientException: " + clientEx.Message }; // } // catch (CosServerException serverEx) // { // return new ResponseModel { Code = 500, Message = "CosServerException: " + serverEx.GetInfo() }; // } //} ///// ///// 简单上传文件最大支持上传5GB文件 ///// ///// 存储桶名称 ///// 对象键 ///// 文件二进制数据 ///// //public ResponseModel UploadFile(string buketName, string key, byte[] file) //{ // try // { // string bucket = buketName + "-" + appid; //存储桶名称 格式:BucketName-APPID // PutObjectRequest request = new PutObjectRequest(bucket, key, file); // //设置进度回调 // request.SetCosProgressCallback(delegate (long completed, long total) // { // Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total)); // }); // //执行请求 // PutObjectResult result = cosXml.PutObject(request); // //result.GetResultInfo() // if (result.httpCode == 200) // { // return new ResponseModel { Code = 200, Message = result.eTag }; // } // else // { // return new ResponseModel { Code = result.httpCode, Message = result.httpMessage }; // } // } // catch (CosClientException clientEx) // { // return new ResponseModel { Code = 500, Message = "CosClientException: " + clientEx.Message }; // } // catch (CosServerException serverEx) // { // return new ResponseModel { Code = 500, Message = "CosServerException: " + serverEx.GetInfo() }; // } //} } }