方式一:使用STS产生的临时令牌后直接上传
1.1.STS产生id和key以及安全令牌
2.使用步骤一数据 直接实例化然后上传文件 成功上传并且在STS设置的访问限制有效
代码示例:
public HttpResponseMessage TestSTS()
{
try
{
//构建一个阿里云client,用于发起请求
//构建阿里云client时需要设置AccessKey ID和AccessKey Secret
DefaultProfile.GetProfile().AddEndpoint(REGIONID, REGIONID, "Sts", ENDPOINT);
IClientProfile profile = DefaultProfile.GetProfile(REGIONID, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
//构建AssumeRole请求
AssumeRoleRequest request = new AssumeRoleRequest();
request.AcceptFormat = FormatType.JSON;
//指定角色ARN
request.RoleArn = "acs:ram::xxx";
request.RoleSessionName = "xxx";//随意取值 长度为2~32个字符,可包含英文字母、数字、点号(.)、at(@)、 短横线(-)和下划线(_)。
//设置Token有效期,可选参数,默认3600秒
request.DurationSeconds = 3600;
//设置Token的附加权限策略;在获取Token时,通过额外设置一个权限策略进一步减小Token的权限
request.Policy = "xxx";
try
{
AssumeRoleResponse response = client.GetAcsResponse(request);
return Request.CreateResponse(
new {
AccessKeyId = response.Credentials.AccessKeyId,
AccessKeySecret = response.Credentials.AccessKeySecret,
SecurityToken = response.Credentials.SecurityToken
});
}
catch (Exception ex)
{
return Request.CreateResponse(new { ErrMes = ex.ToString() });
}
}
catch (Exception)
{
throw;
}
}
文件上传:
OssClient client = new OssClient(endpoint, mId, mKey, securityToken);
// 上传文件。
client.PutObject( bucketName,"上传的文件路径", "file");
方式二:结合URL进行文件上传
1.STS产生id和key以及安全令牌
2.URL临时授权(使用的是自己的id和key)
3.使用步骤一进行实例化ossclient 然后根据Url上传 成功 但是STS设置的限制不起作用 目,使用的是url中指定的的bucket和文件夹
产生URL:
var objectName = "上传文件路径";
// 创建OSSClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// 生成上传签名URL。
var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Put)
{
Expiration = DateTime.Now.AddMinutes(30),
};
var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest);
文件上传:
OssClient client = new OssClient(endpoint, "STS产生的临时ID", "STS产生的临时key", "STS产生的临时令牌");
var objectContent = “file”;
// 使用签名URL上传文件。
var buffer = Encoding.UTF8.GetBytes(objectContent);
using (var ms = new MemoryStream(buffer))
{
client.PutObject(new Uri(signedUrl), ms);
}