zoukankan      html  css  js  c++  java
  • 阿里云 oss 上传文件,js直传,.net 签名,回调

    后台签名

    添加引用

    string dir =  string.Format("{0:yyyy-MM-dd}", date) + "/";
                OssClient client = new OssClient(Endpoint, AccessKeyId, AccessKeySecret);
    
                DateTime ex = DateTime.Now.AddSeconds(1800);
    
                PolicyConditions policyConds = new PolicyConditions();
    
                policyConds.AddConditionItem(PolicyConditions.CondContentLengthRange, 0L, 1048576000L);
                policyConds.AddConditionItem(MatchMode.StartWith, PolicyConditions.CondKey, dir);
    
                string postPolicy = client.GeneratePostPolicy(ex, policyConds);
                byte[] binaryData = Encoding.UTF8.GetBytes(postPolicy);
                string policy = Convert.ToBase64String(binaryData);
                var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(AccessKeySecret));
                var hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(policy));
                var signature = Convert.ToBase64String(hashBytes);
                OSSSign sign = new OSSSign
                {
                    OSSAccessKeyId = AccessKeyId,
                    policy = policy,
                    signature = signature,
                    Host = "https://" + BucketName + "." + Endpoint,
                    success_action_status = "200",
    
                    Filename = "${filename}",
                    key = dir + "${filename}"
                };
                TimeSpan ts = ex.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                sign.expire = Convert.ToInt64(ts.TotalSeconds).ToString();
    
                sign.callback = JsonConvert.SerializeObject(new
                {
                    callbackUrl = CallbackUrl,
                    callbackHost = CallbackHost,
                    callbackBody = "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}",
                    callbackBodyType = "application/x-www-form-urlencoded"
                });
                //sign.callback = Convert.ToBase64String(Encoding.UTF8.GetBytes(sign.callback));
                return sign;

    回调  一般处理程序实现

     LogHelper.Warn("oss 回调" + DateTime.Now.ToLongTimeString());
    
                string autorizationInput = context.Request.Headers["Authorization"];
                string pubKeyInput = context.Request.Headers["x-oss-pub-key-url"];
    
                string bucket = context.Request.Headers["x-oss-bucket"];
                LogHelper.Warn(autorizationInput + "==" + pubKeyInput);
                byte[] pubKey = Convert.FromBase64String(pubKeyInput);
                string pubKeyAddr = Encoding.Default.GetString(pubKey);//公钥的url地址
                //x-oss-pub-key-url 头的值必须以 开始
                if (!pubKeyAddr.StartsWith("http://gosspublic.alicdn.com/") && !pubKeyAddr.StartsWith("https://gosspublic.alicdn.com/"))
                {
                    return;
                }
                #region 签名校验没有实现。。。。。。
                //string publickey = executeGet(pubKeyAddr);//公钥
                //publickey = publickey.Replace("-----BEGIN PUBLIC KEY-----", "");
                //publickey = publickey.Replace("
    ", "");
                //publickey = publickey.Replace("-----END PUBLIC KEY-----", "");
    
                //获取待签名字符串
                //string queryString = context.Request.Url.Query;
                //string uri = context.Request.Url.AbsolutePath;
                //string decodeUri = HttpContext.Current.Server.UrlDecode(uri);
                //string authStr = decodeUri;
                //if (string.IsNullOrEmpty(queryString))
                //{
                //authStr += "?" + queryString;
                //}
                //authStr += "bucket=" + bucket;
    
                //using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                //{
                //    byte[] binKey = Convert.FromBase64String(publickey); // Base64解码
                //    RSAParameters rsap = new RSAParameters();
                //    rsap.Modulus = binKey;
                //    rsap.Exponent = new byte[] { 1, 0, 1 };
                //    rsa.ImportParameters(rsap);
    
                //    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                //    var data = rsa.SignData(Convert.FromBase64String(authStr), md5);
                //    var flag = rsa.VerifyData(data, md5, Convert.FromBase64String(autorizationInput));
                //    if (flag)
                //        LogHelper.Warn("success");
                //}
    
                #endregion
    
                string filename = context.Request.Params["filename"];
                string companyid = context.Request.Params["companyid"];
                string typeid = context.Request.Params["typeid"];
                string size = context.Request.Params["size"];
                string mimeType = context.Request.Params["mimeType"];
                string height = context.Request.Params["height"];
                string width = context.Request.Params["width"];
    
    
     context.Response.ContentType = "application/json";
                context.Response.StatusCode = 200;
                context.Response.Write("{"Status":"OK"}");
                context.Response.End();




    /// <summary>
    /// 读取公钥
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public string executeGet(string url)
    {
    string responseStr;
    Uri address = new Uri(url);
    HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
    request.Accept = "application/xml";
    request.ContentType = "application/xml;charset=utf-8";
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
    StreamReader reader = new StreamReader(response.GetResponseStream());
    responseStr = reader.ReadToEnd();
    }

    
    

    return responseStr;
    }

     
  • 相关阅读:
    poj 1562 Oil Deposits
    poj 1650 Integer Approximation
    snmp4j 编程
    ubuntu 13.04 163源(亲测可用)
    c语言中static 用法总结(转)
    Spring入门
    Hibernate入门
    Struts2入门教程
    素数距离问题
    ASCII码排序
  • 原文地址:https://www.cnblogs.com/lengp/p/6894933.html
Copyright © 2011-2022 走看看