using System; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Library; using System.Web; using System.Security.Cryptography; using System.Text; using Aliyun.OSS; using LitJson; // For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace MySystem.Areas.Api.Controllers { [Area("Api")] [Route("Api/[controller]/[action]")] public class PublicMethodController : BaseController { public PublicMethodController(IHttpContextAccessor accessor, ILogger logger, IOptions setting) : base(accessor, logger, setting) { } #region 系统-上传图片 public JsonResult UploadPhotoByBase64(string value) { try { value = value.Replace("data:image/png;base64,", ""); string base64str = HttpUtility.UrlDecode(value).Replace(" ", "+"); string dummyData = base64str.Replace("%", "").Replace(",", "").Replace(" ", "+"); if (dummyData.Length % 4 > 0) { dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '='); } string Icon = function.base64StringToImage(dummyData, "/static/upload/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/", "MT" + function.MD5_16(Guid.NewGuid().ToString()) + ".png"); return Json(new AppResultJson() { Status = "1", Info = "", Data = Icon }); } catch (Exception ex) { function.WriteLog(DateTime.Now + ":" + ex.ToString(), "系统上传图片异常"); return Json(new AppResultJson() { Status = "1", Info = "", Data = "" }); } } #endregion #region 前端上传oss返回参数 public JsonResult OssInfo(string value) { value = DesDecrypt(value); JsonData data = JsonMapper.ToObject(value); string dir = data["dir"].ToString(); //文件上传路径 if (string.IsNullOrEmpty(data["dir"].ToString())) { return Json(new AppResultJson() { Status = "1", Info = "文件上传路径不能为空" }); } Dictionary Obj = new Dictionary(); var OssUrl = OssHost; var AccessKeyId = OssKey; var AccessKeySecret = OssSecret; var endpoint = "https://" + OssEndpoint; // 构造OssClient实例。 endpoint 格式:https://oss-cn-beijing.aliyuncs.com var ossClient = new OssClient(endpoint, AccessKeyId, AccessKeySecret); var config = new PolicyConditions(); config.AddConditionItem(PolicyConditions.CondContentLengthRange, 1, 1024L * 1024 * 1024 * 5);// 文件大小范围:单位byte config.AddConditionItem(MatchMode.StartWith, PolicyConditions.CondKey, dir); 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(AccessKeySecret)); var bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(policyBase64)); var Signature = Convert.ToBase64String(bytes); Obj.Add("OssUrl", OssUrl); Obj.Add("AccessKeyId", AccessKeyId); // Obj.Add("AccessKeySecret", AccessKeySecret); Obj.Add("Policy", policyBase64); Obj.Add("Expiration", expire); Obj.Add("Signature", Signature); Obj.Add("dir", dir); return Json(new AppResultJson() { Status = "1", Info = "", Data = Obj }); } #endregion } }