gyhlw_dotnet/网站项目/VRS/Util/CosClient.cs

387 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
/// <summary>
/// 初始化
/// </summary>
/// <param name="_appid">appid</param>
/// <param name="_region">地域</param>
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);
}
/// <summary>
/// 高级接口上传文件对象
/// </summary>
/// <param name="buketName">存储桶名称</param>
/// <param name="key">对象键</param>
/// <param name="srcPath">本地文件路径</param>
/// <returns></returns>
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() };
}
}
/// <summary>
/// 删除文件对象
/// </summary>
/// <param name="buketName">存储桶名称</param>
/// <param name="key">对象键</param>
/// <returns></returns>
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() };
}
}
/// <summary>
/// 高级接口下载文件对象
/// </summary>
/// <param name="buketName">存储桶名称</param>
/// <param name="key">存储键</param>
/// <param name="localDir">本地下载保存路径</param>
/// <param name="localFileName">本地下载保存文件名称</param>
/// <returns></returns>
public async Task<ResponseModel> 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 };
}
}
/// <summary>
/// 设置跨域配置
/// </summary>
/// <param name="buketName">存储桶名称</param>
/// <param name="corsId">规则的 ID</param>
/// <param name="domainName">域名多个以,隔开</param>
/// <returns></returns>
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<string>();
var list = domainName.Split(',');
foreach (var item in list)
{
corsRule.allowedOrigins.Add(item);//域名
}
corsRule.allowedMethods = new List<string>();
corsRule.allowedMethods.Add("PUT");
corsRule.allowedMethods.Add("GET");
corsRule.allowedMethods.Add("POST");
corsRule.allowedMethods.Add("DELETE");
corsRule.allowedMethods.Add("HEAD");
corsRule.allowedHeaders = new List<string>();
corsRule.allowedHeaders.Add("*");
//corsRule.exposeHeaders = new List<string>();
//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() };
}
}
/// <summary>
/// 查询跨域配置
/// </summary>
/// <param name="buketName">存储桶名称</param>
/// <returns></returns>
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() };
}
}
/// <summary>
/// 删除存储桶跨域规则
/// </summary>
/// <param name="buketName">存储桶名称</param>
/// <returns></returns>
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() };
}
}
///// <summary>
///// 简单上传文件最大支持上传5GB文件
///// </summary>
///// <param name="buketName">存储桶名称</param>
///// <param name="key">对象键</param>
///// <param name="srcPath">本地文件路径</param>
///// <returns></returns>
//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() };
// }
//}
///// <summary>
///// 简单上传文件最大支持上传5GB文件
///// </summary>
///// <param name="buketName">存储桶名称</param>
///// <param name="key">对象键</param>
///// <param name="file">文件二进制数据</param>
///// <returns></returns>
//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() };
// }
//}
}
}