阿里云OSS搭建移动应用直传服务的.Net C#示例
OSS好几个都没有.Net示例,只有SDK
于是我就拿Java改成C#代码;使用前先去Nuget包管理器下载Aliyun.Acs.Core还有Aliyun.Acs.Sts;
在安装这个两个包的时候安装不了,可能因为是.Net Core的原因吧。
Nuget安装方式安装不了的,先去
https://github.com/aliyun/aliyun-openapi-net-sdk
下载这两个项目然后生成引用到自己项目中。
安装后复制下面的代码即可,记得要把bucketName改成自己bucket的名字
using Aliyun.Acs.Core.Exceptions; using Aliyun.Acs.Sts.Model.V20150401; using Aliyun.Acs.Core.Http; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Core; namespace Test { public class OssServer { private const string REGION_CN_HANGZHOU = "cn-hangzhou"; private const string STS_API_VERSION = "2015-04-01"; private const string AccessKeyID = "****你的AccessKeyID****"; private const string AccessKeySecret = "****你的AccessKeySecret****"; private const string RoleArn = "****你的RoleArn****"; private const int TokenExpireTime = 3600; //这里是权限配置,请参考oss的文档 private const string PolicyFile = @"{ ""Statement"": [ { ""Action"": [ ""oss:PutObject"" ], ""Effect"": ""Allow"", ""Resource"": [""acs:oss:*:*:bucketName/*"", ""acs:oss:*:*:bucketName""] } ], ""Version"": ""1"" }"; private AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy, ProtocolType protocolType, long durationSeconds) { try { // 创建一个 Aliyun Acs Client, 用于发起 OpenAPI 请求 IClientProfile profile = DefaultProfile.GetProfile(REGION_CN_HANGZHOU, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); // 创建一个 AssumeRoleRequest 并设置请求参数 AssumeRoleRequest request = new AssumeRoleRequest(); //request.Version = STS_API_VERSION; request.Method = MethodType.POST; //request.Protocol = protocolType; request.RoleArn = roleArn; request.RoleSessionName = roleSessionName; request.Policy = policy; request.DurationSeconds = durationSeconds; // 发起请求,并得到response AssumeRoleResponse response = client.GetAcsResponse(request); return response; } catch (ClientException e) { throw e; } } public StsTokenModel GetToken() { // 只有 RAM用户(子账号)才能调用 AssumeRole 接口 // 阿里云主账号的AccessKeys不能用于发起AssumeRole请求 // 请首先在RAM控制台创建一个RAM用户,并为这个用户创建AccessKeys // RoleArn 需要在 RAM 控制台上获取 // RoleSessionName 是临时Token的会话名称,自己指定用于标识你的用户,主要用于审计,或者用于区分Token颁发给谁 // 但是注意RoleSessionName的长度和规则,不要有空格,只能有'-' '_' 字母和数字等字符 // 具体规则请参考API文档中的格式要求 string roleSessionName = "alice-001"; // 必须为 HTTPS try { AssumeRoleResponse stsResponse = assumeRole(AccessKeyID, AccessKeySecret, RoleArn, roleSessionName, PolicyFile, ProtocolType.HTTPS, TokenExpireTime); return new StsTokenModel() { status = 200, AccessKeyId = stsResponse.Credentials.AccessKeyId, AccessKeySecret = stsResponse.Credentials.AccessKeySecret, Expiration = stsResponse.Credentials.Expiration, Security = stsResponse.Credentials.SecurityToken }; } catch (ClientException e) { return new StsTokenModel() { status = Convert.ToInt32(e.ErrorCode) }; } } } }
GetToken()函数返回的STS凭据数据模型
1 2 3 4 5 6 7 8 9 10 11 12 | public class StsTokenModel { public int status { get ; set ; } public string AccessKeyId { get ; set ; } public string AccessKeySecret { get ; set ; } public string Security { get ; set ; } public string Expiration { get ; set ; } } |
分类:
Aliyun
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构