| | |
| | |  |
| | | using Aliyun.Acs.Core.Exceptions; |
| | | using Aliyun.OSS; |
| | | |
| | | using Aliyun.OSS.Util; |
| | | using cylsg.utility; |
| | | using cylsg.utility.Extend; |
| | |
| | | using Microsoft.AspNetCore.Http; |
| | | |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Buffers.Text; |
| | | using System.Drawing; |
| | | using System.Globalization; |
| | | using System.Security.Policy; |
| | | using System.Security.Cryptography; |
| | | using System.Text; |
| | | using Tea; |
| | | using TencentCloud.Ocr.V20181119.Models; |
| | | using TencentCloud.Teo.V20220901.Models; |
| | | |
| | | using Task = System.Threading.Tasks.Task; |
| | | using Newtonsoft.Json; |
| | | using static AlibabaCloud.SDK.Sts20150401.Models.AssumeRoleResponseBody; |
| | | namespace EzUpFile |
| | | { |
| | | /// <summary> |
| | |
| | | throw Oops.Oh(ex.Message); |
| | | } |
| | | |
| | | //è¿åç»UEditorçæå
¥ç¼è¾å¨çå¾ççsrc |
| | | |
| | | |
| | | return App.Configuration["FileUploadOptions:AliOSSSaveBaseUrl"] + filePath; |
| | | } |
| | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region æ¬å°ä¸ä¼ äºæå¡å¨åè¯è®¡ç® |
| | | |
| | | |
| | | public Dictionary<string, string> GetToken1() |
| | | { |
| | | |
| | | var dir = DateTime.Now.ToString("yyyyMMdd") + "/"; |
| | | // æé OssClientå®ä¾ã endpoint æ ¼å¼:https://oss-cn-beijing.aliyuncs.com |
| | | // var ossClient = new OssClient( App.Configuration["FileUploadOptions:AliOSSSaveBaseUrl"], App.Configuration["FileUploadOptions:AliOSSAccessKeyID"], App.Configuration["FileUploadOptions:AliOSSAccessKeySecret"]); |
| | | var rt = GetSTSToken(); |
| | | |
| | | |
| | | |
| | | |
| | | String securityToken = rt.AccessKeySecret; //è·åToken |
| | | var config = new PolicyConditions(); |
| | | |
| | | config.AddConditionItem(PolicyConditions.CondContentLengthRange, 1, 1024L * 1024 * 1024 * 5);// æä»¶å¤§å°èå´ï¼åä½byte |
| | | config.AddConditionItem(MatchMode.StartWith, PolicyConditions.CondKey, dir); |
| | | //æ
å |
| | | config.AddConditionItem("bucket", App.Configuration["FileUploadOptions:AliOSSBucketName"]); |
| | | config.AddConditionItem("x-oss-signature-version", "OSS4-HMAC-SHA256"); |
| | | config.AddConditionItem("x-oss-security-token", securityToken); |
| | | // //è¯·æ±æ¶é´ |
| | | config.AddConditionItem("x-oss-date", DateTime.Now.ToString("yyyyMMdd'T'HHmmss'Z'")); |
| | | config.AddConditionItem("x-oss-credential", App.Configuration["FileUploadOptions:AliOSSAccessKeyID"] + "/" + DateTime.Now.ToString("yyyyMMdd") + "/cn-chengdu/oss/aliyun_v4_request"); |
| | | var expire = DateTimeOffset.Now.AddMinutes(30);// è¿ææ¶é´ |
| | | |
| | | // çæ Policyï¼å¹¶è¿è¡ Base64 ç¼ç |
| | | // var policy = ossClient.GeneratePostPolicy(expire.LocalDateTime, config); |
| | | // var policyBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(policy)); |
| | | |
| | | // 计ç®ç¾å |
| | | var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(App.Configuration["FileUploadOptions:AliOSSAccessKeySecret"])); |
| | | // var bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(policyBase64)); |
| | | // var sign = Convert.ToBase64String(bytes); |
| | | |
| | | return new Dictionary<string, string>(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | public static AlibabaCloud.SDK.Sts20150401.Client CreateClient() |
| | | { |
| | | // å·¥ç¨ä»£ç æ³é²å¯è½ä¼å¯¼è´ AccessKey æ³é²ï¼å¹¶å¨èè´¦å·ä¸ææèµæºçå®å
¨æ§ã以ä¸ä»£ç 示ä¾ä»
ä¾åèã |
| | | // å»ºè®®ä½¿ç¨æ´å®å
¨ç STS æ¹å¼ï¼æ´å¤é´æè®¿é®æ¹å¼è¯·åè§ï¼https://help.aliyun.com/document_detail/378671.htmlã |
| | | AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config |
| | | { |
| | | // å¿
å¡«ï¼è¯·ç¡®ä¿ä»£ç è¿è¡ç¯å¢è®¾ç½®äºç¯å¢åé ALIBABA_CLOUD_ACCESS_KEY_IDã |
| | | AccessKeyId = "LTAI5tKegnEbaSRPFRwDxeFd", |
| | | // å¿
å¡«ï¼è¯·ç¡®ä¿ä»£ç è¿è¡ç¯å¢è®¾ç½®äºç¯å¢åé ALIBABA_CLOUD_ACCESS_KEY_SECRETã |
| | | AccessKeySecret = "9Hv6VYgWhpDHCMkwMLHiqF6ihusjdl", |
| | | }; |
| | | // Endpoint 请åè https://api.aliyun.com/product/Sts |
| | | config.Endpoint = "sts.cn-chengdu.aliyuncs.com"; |
| | | return new AlibabaCloud.SDK.Sts20150401.Client(config); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·å临æ¶åè¯ |
| | | /// </summary> |
| | | public static AssumeRoleResponseBodyCredentials GetSTSToken() |
| | | { |
| | | AlibabaCloud.SDK.Sts20150401.Client client = CreateClient(); |
| | | AlibabaCloud.SDK.Sts20150401.Models.AssumeRoleRequest assumeRoleRequest = new AlibabaCloud.SDK.Sts20150401.Models.AssumeRoleRequest |
| | | { |
| | | Policy = "{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}", |
| | | DurationSeconds = 3600, |
| | | RoleArn = "acs:ram::1299465997752835:role/weixinupdatarl", |
| | | RoleSessionName = "weixinupdataRl", |
| | | }; |
| | | AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); |
| | | try |
| | | { |
| | | // å¤å¶ä»£ç è¿è¡è¯·èªè¡æå° API çè¿åå¼ |
| | | var data = client.AssumeRoleWithOptions(assumeRoleRequest, runtime); |
| | | if (data.StatusCode == 200) |
| | | { |
| | | |
| | | return data.Body?.Credentials; |
| | | } |
| | | throw Oops.Oh("é¿éäºè·å临æ¶åè¯é误"); |
| | | } |
| | | catch (TeaException error) |
| | | { |
| | | |
| | | AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); |
| | | throw; |
| | | } |
| | | catch (Exception _error) |
| | | { |
| | | TeaException error = new TeaException(new Dictionary<string, object> |
| | | { |
| | | { "message", _error.Message } |
| | | }); |
| | | |
| | | AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); |
| | | throw error; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public Dictionary<string, string> GetToken() |
| | | { |
| | | // è·åç¯å¢åé |
| | | |
| | | string regionId = "cn-chengdu"; |
| | | string roleSessionName = "weixinupdataRl"; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // å®ä¹STS临æ¶è®¿é®åè¯åé |
| | | string stsAccessKeyId = null; |
| | | string stsSecretAccessKey = null; |
| | | string securityToken = null; |
| | | |
| | | try |
| | | { |
| | | var rt = GetSTSToken(); |
| | | |
| | | stsAccessKeyId = rt.AccessKeyId; |
| | | stsSecretAccessKey = rt.AccessKeySecret; |
| | | securityToken = rt.SecurityToken; |
| | | } |
| | | catch (ServerException e) |
| | | { |
| | | throw; |
| | | } |
| | | catch (ClientException e) |
| | | { |
| | | throw; |
| | | } |
| | | |
| | | // æ ¼å¼åè¯·æ±æ¥æ |
| | | DateTimeOffset now = DateTimeOffset.UtcNow; |
| | | string dtObj1 = now.ToString("yyyyMMdd'T'HHmmss'Z'", CultureInfo.InvariantCulture); |
| | | string dtObj2 = now.ToString("yyyyMMdd", CultureInfo.InvariantCulture); |
| | | string expirationTime = now.AddHours(3).ToString("yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture); |
| | | |
| | | // å建policy |
| | | Dictionary<string, object> policy = new Dictionary<string, object> |
| | | { |
| | | { "expiration", expirationTime }, |
| | | { "conditions", new List<object> |
| | | { |
| | | new Dictionary<string, string> { { "bucket", App.Configuration["FileUploadOptions:AliOSSBucketName"] } }, // 请å°<bucketname>æ¿æ¢ä¸ºæ¨çå®é
Bucketåç§° |
| | | new Dictionary<string, string> { { "x-oss-signature-version", "OSS4-HMAC-SHA256" } }, |
| | | new Dictionary<string, string> { { "x-oss-credential", $"{stsAccessKeyId}/{dtObj2}/{regionId}/oss/aliyun_v4_request" } }, // 请å°<cn-hangzhou>æ¿æ¢ä¸ºæ¨çå®é
Bucketæå¤å°åï¼ä¾å¦å京å°å为ï¼cn-beijing |
| | | new Dictionary<string, string> { { "x-oss-security-token", securityToken } }, |
| | | new Dictionary<string, string> { { "x-oss-date", dtObj1 } } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | string jsonPolicy = JsonConvert.SerializeObject(policy); |
| | | |
| | | // æé å¾
ç¾åå符串ï¼StringToSignï¼ |
| | | string stringToSign = Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonPolicy)); |
| | | |
| | | // 计ç®SigningKey |
| | | byte[] dateKey = HmacSha256("aliyun_v4" + stsSecretAccessKey, dtObj2); |
| | | byte[] dateRegionKey = HmacSha256(dateKey, regionId); // 请å°<cn-hangzhou>æ¿æ¢ä¸ºæ¨çå®é
Bucketæå¤å°åï¼ä¾å¦å京å°å为ï¼cn-beijing |
| | | byte[] dateRegionServiceKey = HmacSha256(dateRegionKey, "oss"); |
| | | byte[] signingKey = HmacSha256(dateRegionServiceKey, "aliyun_v4_request"); |
| | | |
| | | // 计ç®Signature |
| | | byte[] result = HmacSha256(signingKey, stringToSign); |
| | | string signature = BitConverter.ToString(result).Replace("-", "").ToLower(); |
| | | |
| | | Dictionary<string, string> messageMap = new Dictionary<string, string> |
| | | { |
| | | { "security_token", securityToken }, |
| | | { "signature", signature }, |
| | | { "x_oss_date", dtObj1 }, |
| | | { "x_oss_credential", $"{stsAccessKeyId}/{dtObj2}/{regionId}/oss/aliyun_v4_request" }, // 请å°<cn-hangzhou>æ¿æ¢ä¸ºæ¨çå®é
Bucketæå¤å°åï¼ä¾å¦å京å°å为ï¼cn-beijing |
| | | { "x_oss_signature_version", "OSS4-HMAC-SHA256" }, |
| | | { "policy", stringToSign } |
| | | }; |
| | | |
| | | // æå°è¿åè³å®¢æ·ç«¯çç¾åä¿¡æ¯ |
| | | return messageMap; |
| | | } |
| | | |
| | | |
| | | |
| | | private static byte[] HmacSha256(byte[] key, string message) |
| | | { |
| | | using (HMACSHA256 hmac = new HMACSHA256(key)) |
| | | { |
| | | return hmac.ComputeHash(Encoding.UTF8.GetBytes(message)); |
| | | } |
| | | } |
| | | |
| | | private static byte[] HmacSha256(string key, string message) |
| | | { |
| | | using (HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key))) |
| | | { |
| | | return hmac.ComputeHash(Encoding.UTF8.GetBytes(message)); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |