阿里云 oss 上传文件,js直传,.net 签名,回调
后台签名
添加引用

string dir = string.Format("{0:yyyy-MM-dd}", date) + "/";
OssClient client = new OssClient(Endpoint, AccessKeyId, AccessKeySecret);
DateTime ex = DateTime.Now.AddSeconds();
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 = "",
Filename = "${filename}",
key = dir + "${filename}"
};
TimeSpan ts = ex.ToUniversalTime() - new DateTime(, , , , , , );
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("\n", "");
//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 = ;
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;
}
阿里云 oss 上传文件,js直传,.net 签名,回调的更多相关文章
- TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片
**TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片首先我们来看看淘宝的功能和样式:** 之后看看制作完成的演示:(由于全部功能弄成GIF有点大,限制上传大小好像在1M之内,压缩之后也有1.9 ...
- 关于 tp5.0 阿里云 oss 上传文件操作
tp5.0 结合阿里云oss 上传文件 1.引入 oss 的空间( composer install 跑下第三方拓展包及核心代码包) 备注:本地测试无误,放到线上有问题 应该是移动后的路劲(相对于服 ...
- 使用阿里云OSS上传文件
本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进 ...
- 阿里云OSS上传文件本地调试跨域问题解决
问题描述: 最近后台说为了提高上传效率,要前端直接上传文件到阿里云,而不经过后台.因为在阿里云服务器设置的允许源(region)为某个固定的域名下的源(例如*.cheche.com),直接在本地访问会 ...
- 阿里云OSS 上传文件SDK
Aliyun OSS SDK for C# 上传文件 另外:查找的其他实现C#上传文件功能例子: 1.WPF用流的方式上传/显示/下载图片文件(保存在数据库) (文末有案例下载链接) 2.WPF中利用 ...
- 阿里云OSS上传文件demo
1.安装ali-oss npm install ali-oss --save 2.demo 此例中使用到了ElementUI的el-upload组件.因为样式为自定义的 所以没有用element的自动 ...
- 阿里云oss上传文件如何支持https?
let client = new OSS.Wrapper({ accessKeyId: res.data.accessKeyId, accessKeySecret: res.data.accessKe ...
- c#版阿里云oss上传——基于layui、pupload的oss 后端web端直传的vue组件
废话前言 去年,做项目用到oss上传,度娘上逛了一圈写了个前后端代码结合的c#版oss上传. 今年又要用到oss上传时发现很难复用,复用改动的范围太大,显然这个轮子不合格.于是想了下,花了一天的时间( ...
- android 阿里云oss上传
购买了阿里云的oss空间,于是用它来存储图片,不过中间的使用算是出了些问题,导致很长的才成功. 不得不说,阿里云文档真的是无力吐槽...乱七八糟的.我完全是东拼西凑,才完成的图片上传功能. 走了很多的 ...
随机推荐
- 小程序 components 下的组件引入字体图标时样式不生效
在组件内的样式在引入一遍 字体图标样式, pages 下的组件不受影响,全局引入字体图标样式即刻,不需要再次引入
- Linux基础命令---tload显示系统负载
tload tload指令以字符的方式显示当前系统的平均负载情况. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.SUSE.openSUSE. 1.语法 ...
- Mysql+jsp连接记录
1.下载tomacat 2.jsp项目的创建 3.tomacat和jsp挂钩起来 4.mysql下载 5.mysql可视化 6.随便写下sql语句 7.下载jdbc驱动 8.在jsp里面写 over!
- 【sed】增加一列【shell文本处理】
有些简单的文本处理不需要写程序,利用awk和sed就可以很好的完成. 今天记录一下在已有文件中增加一列的方法 sed -i "s/^/Chr${i}\t&/g" file ...
- Java8-对map排序
1.Java8对map按key排序 /** * @author : fengkun * @date : 19-3-10 * 内容 : Java8对map按key排序 */ public class S ...
- 原生JS动态添加和删除类
原生JS动态添加和删除类 由于需要, 给按钮组监听点击事件(要求用事件委托),当有一个按钮被点击时,相应的给该按钮添加一个类(激活类),其他没有点击的按钮就要移出该类 添加和和删除类有三种方法 首先等 ...
- 手推C3算法
C3算法规则 -- 每一个类的继承顺序都是从基类向子类看 -- 形成一个指向关系的顺序[当前类] + [父类的继承顺序] -- 进行一个提取 -- 如果一个类出现从左到右的第一个顺序上,并且没有出现在 ...
- Hibernate的Cascade——级联操作
在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,顾名思义就是级联,也就是说在操作当 前实体时,针对当前实体的操作会影响到相应配置的关联实体.比如针对当前实体进行保存操作 ...
- opencv学习之路(37)、运动物体检测(二)
一.运动物体轮廓椭圆拟合及中心 #include "opencv2/opencv.hpp" #include<iostream> using namespace std ...
- 清北学堂北京大学冯哲神仙讲课day2
今天讲基础数据结构 首先讲(二叉搜索树) 保证左儿子小于右儿子,那么对于根节点来说.大于根节点的放到右子树递归,小于根节点的放在左子树 相等的呢?某大佬(老师)这么说: 删除的前提是找这个点在哪: 如 ...