SQLBackupToCOS/SQLBackupToCOS/COSService.cs

60 lines
2.2 KiB
C#

using COSXML;
using COSXML.Auth;
using COSXML.Model;
using COSXML.Transfer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace SQLBackupToCOS
{
public class COSService
{
private readonly IConfiguration _config;
private readonly ILogger _logger;
public COSService(IConfiguration config, ILogger<COSService> logger)
{
_config = config;
_logger = logger;
}
public async Task AddFileToCOS(string srcPath)
{
var bucketName = _config.GetValue<string>("COS:BucketName") ?? "my-bucket";
var region = _config.GetValue<string>("COS:Region") ?? "ap-shanghai";
var secretId = _config.GetValue<string>("COS:SecretId") ?? "";
var secretKey = _config.GetValue<string>("COS:SecretKey") ?? "";
var filePath = _config.GetValue<string>("COS:FilePath") ?? "/data/dumps/";
CosXmlConfig config = new CosXmlConfig.Builder()
.IsHttps(true) // 设置默认 HTTPS 请求
.SetRegion(region) // 设置一个默认的存储桶地域
.Build();
QCloudCredentialProvider cosCredentialProvider = new DefaultQCloudCredentialProvider(secretId, secretKey, 600);
var cosXML = new CosXmlServer(config, cosCredentialProvider);
// 初始化 TransferConfig
TransferConfig transferConfig = new TransferConfig();
// 初始化 TransferManager
TransferManager transferManager = new TransferManager(cosXML, transferConfig);
string cosPath = Path.Combine(filePath, Path.GetFileName(srcPath));
// 上传对象
COSXMLUploadTask uploadTask = new COSXMLUploadTask(bucketName, cosPath);
uploadTask.SetSrcPath(srcPath);
uploadTask.successCallback = delegate (CosResult result)
{
_logger.LogInformation("Upload Success: " + result.GetResultInfo());
};
try
{
await transferManager.UploadAsync(uploadTask);
}
catch (Exception e)
{
_logger.LogError("CosException: " + e);
}
}
}
}