方式一:使用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);
}