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() };
// }
//}
}
}