OssService.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Attribute;
  2. using Dto;
  3. using Vo;
  4. using Model;
  5. using Service;
  6. using System.Text;
  7. using System.Security.Cryptography;
  8. using Aliyun.OSS;
  9. using Infrastructure;
  10. namespace Services.Base
  11. {
  12. /// <summary>
  13. /// app底部导航Service业务层处理
  14. /// </summary>
  15. [AppService(ServiceType = typeof(IOssService), ServiceLifetime = LifeTime.Transient)]
  16. public class OssService : IOssService
  17. {
  18. /// <summary>
  19. /// 前端上传oss返回参数
  20. /// </summary>
  21. /// <param name="parm">请求参数</param>
  22. /// <returns>前端上传oss返回参数</returns>
  23. public OssUploadVo uploadInfo(OssUploadDto param)
  24. {
  25. string dir = param.dir; //文件上传路径
  26. var options = App.OptionsSetting;
  27. var oss = options.ossConfigs;
  28. var OssUrl = oss.Host;
  29. var AccessKeyId = oss.Key;
  30. var AccessKeySecret = oss.Secret;
  31. var endpoint = "https://" + oss.Endpoint;
  32. // 构造OssClient实例。 endpoint 格式:https://oss-cn-beijing.aliyuncs.com
  33. var ossClient = new OssClient(endpoint, AccessKeyId, AccessKeySecret);
  34. var config = new PolicyConditions();
  35. config.AddConditionItem(PolicyConditions.CondContentLengthRange, 1, 1024L * 1024 * 1024 * 5);// 文件大小范围:单位byte
  36. config.AddConditionItem(MatchMode.StartWith, PolicyConditions.CondKey, dir);
  37. var expire = DateTimeOffset.Now.AddMinutes(30);// 过期时间
  38. // 生成 Policy,并进行 Base64 编码
  39. var policy = ossClient.GeneratePostPolicy(expire.LocalDateTime, config);
  40. var policyBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(policy));
  41. // 计算签名
  42. var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(AccessKeySecret));
  43. var bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(policyBase64));
  44. var Signature = Convert.ToBase64String(bytes);
  45. var response = new OssUploadVo()
  46. {
  47. ossUrl = OssUrl,
  48. accessKeyId = AccessKeyId,
  49. policy = policyBase64,
  50. expiration = expire,
  51. signature = Signature,
  52. dir = dir,
  53. };
  54. return response;
  55. }
  56. }
  57. }