相关资源
说明
如果您在使用 SDK 时遇到函数或方法不存在等错误,请先将 SDK 升级到最新版再重试。
第一步:集成 SDK
环境依赖
.NET SDK 基于 .NET Standard 2.0 开发。
Windows:安装 .NET Core 2.0 及以上版本,或者 .NET Framework 2.0 及以上版本。
Linux/Mac:安装 .NET Core 2.0 及以上版本。
添加 SDK
我们提供 Nuget
的集成方式,您可以在工程的 csproj
文件里添加:
<PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.*" />
如果您是使用 .NET CLI,请使用如下命令安装:
dotnet add package Tencent.QCloud.Cos.Sdk
如果您是用于目标框架 .Net Framework 4.0 及以下版本的开发,请下载 Releases 并使用 COSXML-Compatible.dll 文件。 在 Visual Studio 项目中选择项目 > 添加引用 > 浏览 > COSXML-Compatible.dll 的方式添加 .NET(C#) SDK。
说明
兼容包中不包含高级上传、下载等功能的支持,详情参见 向下兼容指南。 第二步:初始化 COS 服务
注意
建议用户 使用临时密钥 调用 SDK,通过临时授权的方式进一步提高 SDK 使用的安全性。申请临时密钥时,请遵循 最小权限指引原则,防止泄漏目标存储桶或对象之外的资源。 如果您一定要使用永久密钥,建议遵循 最小权限指引原则 对永久密钥的权限范围进行限制。 下面为您介绍如何使用 COS .NET SDK 完成一个基础操作,例如初始化客户端、创建存储桶、查询存储桶列表、上传对象、查询对象列表、下载对象和删除对象。
说明
关于文章中出现的 SecretId、SecretKey、Bucket 等名称的含义和获取方式请参见 COS 术语信息。 SDK 中常用的命名空间有:
using COSXML;
using COSXML.Auth;
using COSXML.Model.Object;
using COSXML.Model.Bucket;
using COSXML.CosException;
在执行任何和 COS 服务相关请求之前,都需要先实例化 CosXmlConfig
, QCloudCredentialProvider
, CosXmlServer
3个对象。其中:
CosXmlConfig
提供配置 SDK 接口。
QCloudCredentialProvider
提供设置密钥信息接口。
CosXmlServer
提供各种 COS API 服务接口。
1. 初始化服务设置
string appid = "1250000000";
string region = "COS_REGION";
CosXmlConfig config = new CosXmlConfig.Builder()
.IsHttps(true)
.SetRegion(region)
.SetDebugLog(true)
.Build();
2. 提供访问凭证
SDK 中提供了3种方式:持续更新的临时密钥、不变的临时密钥、永久密钥。
方式1:持续更新的临时密钥
因为临时密钥在一定时效后过期,以下方式保证可以在过期后自动获取到新的临时密钥。
public class CustomQCloudCredentialProvider : DefaultSessionQCloudCredentialProvider
{
public CustomQCloudCredentialProvider(): base(null, null, 0L, null) {
;
}
public override void Refresh()
{
string tmpSecretId = "SECRET_ID";
string tmpSecretKey = "SECRET_KEY";
string tmpToken = "COS_TOKEN";
long tmpStartTime = 1546860702;
long tmpExpiredTime = 1546862502;
SetQCloudCredential(tmpSecretId, tmpSecretKey,
String.Format("{0};{1}", tmpStartTime, tmpExpiredTime), tmpToken);
}
}
QCloudCredentialProvider cosCredentialProvider = new CustomQCloudCredentialProvider();
方式2:不变的临时密钥(不建议)
注意
由于临时密钥在一定时效后过期,这种方式在过期后会请求失败,不建议使用。
string tmpSecretId = "SECRET_ID";
string tmpSecretKey = "SECRET_KEY";
string tmpToken = "COS_TOKEN";
long tmpExpireTime = 1546862502;
QCloudCredentialProvider cosCredentialProvider = new DefaultSessionQCloudCredentialProvider(
tmpSecretId, tmpSecretKey, tmpExpireTime, tmpToken);
方式3:永久密钥(不建议)
string secretId = Environment.GetEnvironmentVariable("SECRET_ID");
string secretKey = Environment.GetEnvironmentVariable("SECRET_KEY");
long durationSecond = 600;
QCloudCredentialProvider cosCredentialProvider = new DefaultQCloudCredentialProvider(
secretId, secretKey, durationSecond);
3. 初始化 CosXmlServer
使用 CosXmlConfig
与 QCloudCredentialProvider
初始化 CosXmlServer
服务类。服务类建议在程序中作为单例使用。
CosXml cosXml = new CosXmlServer(config, cosCredentialProvider);
第三步:访问 COS 服务
创建存储桶
try
{
string bucket = "examplebucket-1250000000";
PutBucketRequest request = new PutBucketRequest(bucket);
PutBucketResult result = cosXml.PutBucket(request);
Console.WriteLine(result.GetResultInfo());
}
catch (COSXML.CosException.CosClientException clientEx)
{
Console.WriteLine("CosClientException: " + clientEx);
}
catch (COSXML.CosException.CosServerException serverEx)
{
Console.WriteLine("CosServerException: " + serverEx.GetInfo());
}
查询存储桶列表
try
{
GetServiceRequest request = new GetServiceRequest();
GetServiceResult result = cosXml.GetService(request);
List<ListAllMyBuckets.Bucket> allBuckets = result.listAllMyBuckets.buckets;
}
catch (COSXML.CosException.CosClientException clientEx)
{
Console.WriteLine("CosClientException: " + clientEx);
}
catch (COSXML.CosException.CosServerException serverEx)
{
Console.WriteLine("CosServerException: " + serverEx.GetInfo());
}
上传对象
TransferConfig transferConfig = new TransferConfig();
TransferManager transferManager = new TransferManager(cosXml, transferConfig);
String bucket = "examplebucket-1250000000";
String cosPath = "exampleobject";
String srcPath = @"temp-source-file";
COSXMLUploadTask uploadTask = new COSXMLUploadTask(bucket, cosPath);
uploadTask.SetSrcPath(srcPath);
uploadTask.progressCallback = delegate (long completed, long total)
{
Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
};
try {
COSXML.Transfer.COSXMLUploadTask.UploadTaskResult result = await
transferManager.UploadAsync(uploadTask);
Console.WriteLine(result.GetResultInfo());
string eTag = result.eTag;
} catch (Exception e) {
Console.WriteLine("CosException: " + e);
}
查询对象列表
try
{
string bucket = "examplebucket-1250000000";
GetBucketRequest request = new GetBucketRequest(bucket);
GetBucketResult result = cosXml.GetBucket(request);
ListBucket info = result.listBucket;
if (info.isTruncated) {
this.nextMarker = info.nextMarker;
}
}
catch (COSXML.CosException.CosClientException clientEx)
{
Console.WriteLine("CosClientException: " + clientEx);
}
catch (COSXML.CosException.CosServerException serverEx)
{
Console.WriteLine("CosServerException: " + serverEx.GetInfo());
}
下载对象
TransferConfig transferConfig = new TransferConfig();
TransferManager transferManager = new TransferManager(cosXml, transferConfig);
String bucket = "examplebucket-1250000000";
String cosPath = "exampleobject";
string localDir = System.IO.Path.GetTempPath();
string localFileName = "my-local-temp-file";
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);
Console.WriteLine(result.GetResultInfo());
string eTag = result.eTag;
} catch (Exception e) {
Console.WriteLine("CosException: " + e);
}
删除对象
try
{
string bucket = "examplebucket-1250000000";
string key = "exampleobject";
DeleteObjectRequest request = new DeleteObjectRequest(bucket, key);
DeleteObjectResult result = cosXml.DeleteObject(request);
Console.WriteLine(result.GetResultInfo());
}
catch (COSXML.CosException.CosClientException clientEx)
{
Console.WriteLine("CosClientException: " + clientEx);
}
catch (COSXML.CosException.CosServerException serverEx)
{
Console.WriteLine("CosServerException: " + serverEx.GetInfo());
}
本页内容是否解决了您的问题?