在使用七牛iOS SDK上传图片时需要用到上传的token,虽然七牛建议token不要在客户端生成,这样做是不安全的,但是我们还是需要了解下客户端是如何生成token的

首先我们需要用到三个参数scope、AccessKey和SecretKey

scope其实就是资源存放的文件夹名字,例如下图的cmxj

AccessKey和SecretKey在个人面板 -> 个人中心 -> 密钥管理里面就能看到

接下来就可以创建token了,首先我们将上传策略中的scope和deadline序列化成json格式,里面的liveTime则是token的有效时间,可以以天为单位

NSMutableDictionary *authInfo = [NSMutableDictionary dictionary];

[authInfo setObject:self.scope forKey:@"scope"];

[authInfo

setObject:[NSNumber numberWithLong:[[NSDate date] timeIntervalSince1970] + self.liveTime * 24 * 3600]

forKey:@"deadline"];

NSData *jsonData =

[NSJSONSerialization dataWithJSONObject:authInfo options:NSJSONWritingPrettyPrinted error:nil];

再对json序列化后的上传策略进行URL安全的base64编码

NSString *encodedString = [self urlSafeBase64Encode:jsonData];

QN_GTM_Base64是七牛SDK提供给用户用来处理base64和WebSafeBase64编码的类,然后将里面的+和/替换成_

- (NSString *)urlSafeBase64Encode:(NSData *)text {

NSString *base64 =

[[NSString alloc] initWithData:[QN_GTM_Base64 encodeData:text] encoding:NSUTF8StringEncoding];

base64 = [base64 stringByReplacingOccurrencesOfString:@"+" withString:@"-"];

base64 = [base64 stringByReplacingOccurrencesOfString:@"/" withString:@"_"];

return base64;

}

然后用secretKey对编码后的上传策略进行HMAC-SHA1加密,并且做安全的base64编码,得到encoded_signed

NSString *encodedSignedString = [self HMACSHA1:self.secretKey text:encodedString];

- (NSString *)HMACSHA1:(NSString *)key text:(NSString *)text {

const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];

const char *cData = [text cStringUsingEncoding:NSUTF8StringEncoding];

char cHMAC[CC_SHA1_DIGEST_LENGTH];

CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:CC_SHA1_DIGEST_LENGTH];

NSString *hash = [self urlSafeBase64Encode:HMAC];

return hash;

}

最后将accessKey、encodedSignedString和encodedString拼接,中间用:分开,得到的就是上传的token

NSString *token = [NSString stringWithFormat:@"%@:%@:%@", self.accessKey, encodedSignedString, encodedString];

php 七牛云获得上传token,客户端生成七牛上传token相关推荐

  1. 七牛云配置二级域名,从而避免七牛云30天自动更改域名的问题

    七牛云配置二级域名,从而避免七牛云30天自动更改域名的问题 写在前面 为什么要解决这个问题呢,我们都知道七牛云在你新建一个存储空间的时候会给你分配一个临时的域名,这个域名是有时间限制的(一般是30天) ...

  2. crmeb 多商户系统七牛云阿里云oss腾讯云cos文件上传配置教程

    本地存储不用填写表单信息 所属地域:腾讯COS和阿里云必须填写,七牛云可不填 七牛云储存创建及使用 1.获取七牛云AccessKey/SecretKey 2.打开七牛云存储 3.创建存储空间 4.绑定 ...

  3. python教程七牛云_使用Python实现数据从七牛云到阿里云的自动化迁移

    工具python3.5 顺手的IDE(轻量级推荐vscode) qiniu/qshell (本文是基于 mac 系统开发,所以使用 qshell 的 mac 版本,读者请根据自己的系统下载,也可以直接 ...

  4. 实现Java+Vue上传图片到七牛云和从七牛云删除图片

    环境准备 开发环境 后端: JDK1.8, SpringBoot2.2.2.RELEASE, Maven3.6.3 前端: vue-element-admin4.4.0 相关链接 七牛云JavaSDK ...

  5. android开发游记:图片的上传下载-使用七牛云存储管理图片

    我们一般都是使用第三方云存储服务来管理图片,图片并不保存在本地,这样的结构,为后台的开发人员省去了很多精力.目前的云存储服务对资源的管理也非常便捷技术也相对成熟,这里我就介绍下目前用的比较多的的七牛云 ...

  6. PHP七牛云上传大视频文件异步存为m3u8格式(包括回调过程)

    问题引入 视频的第一帧加载缓慢. 简介 HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体网络传输协议.它的工作原理是把整个流分成一个个小的基于HTTP的文件来 ...

  7. 前端表单七牛云php,记录一下前端分片上传七牛云踩过的坑

    起因 最近在工作中有个上传大文件的需求,原先咨询过组里的大佬给我推荐了百度的webupload,但后来引入之后发现它是基于jquery封装的.由于本身项目是基于vue开发的所以与jquery相关的开源 ...

  8. 接口查询的数据生成excel上传到七牛云

    接口查询的数据生成excel上传到七牛云 一.注册七牛云并新建一个存储空间 我们公司已经有一个七牛云的账号,登录进去之后创建一个新的对象存储空间.命名为eval_mobile.酒会有一个默认的融合 C ...

  9. elementUI:el-upload分片上传大视频到七牛云

    使用el-upload请求方法的自定义 el-upload请求方法自定义官网的定义 七牛云官方的格式 详情看:七牛云JavaScript SDK 开始 其它的省略,就显示关于上传的部分 <el- ...

  10. php(TP5)图片无损压缩上传到七牛云

    php图片无损压缩上传到七牛云 private $image; //重绘图片private $imageinfo; //重绘图片的具体信息(array)private $percent = 1; // ...

最新文章

  1. java中堆与栈的区别 彻底理解
  2. React.js 小书 Lesson14 - 实战分析:评论功能(一)
  3. Maven jdk.1.7
  4. kettle中job给转换配置相对路径
  5. Hadoop系列(三)MapReduce Job的几种提交运行模式
  6. JWT【JSON Web Token】 简述
  7. 图像 理想低通滤波_图像处理之滤波(下)
  8. Dubbo调用时报错Invalid token Forbid invoke remote service interface
  9. Linux 僵尸进程
  10. leetcode437. 路径总和 III
  11. 设计模式七大原则简述
  12. MySQL内存----使用说明全局缓存+线程缓存) 转
  13. linux清除ip地址命令,ip 命令 和ifconfig 命令 删除IP
  14. [Ansible系列⑦]ansible fact变量
  15. 逐步理解 Flask 的 Blueprint(蓝本)
  16. 散点数据的包络线获取(MATLAB)
  17. BLUP育种值如何计算准确性
  18. mysql isnum()_mysql 一些基础的语法和命令
  19. Perl实现逆波兰式与递归计算
  20. 按键控制步进电机转速(led闪烁)学习心得

热门文章

  1. 哪个学校计算机考研945,2018年郑州大学945软件工程专业基础综合考研复习资料...
  2. python人脸识别统计人数qt窗体
  3. 学习java的第十九天,static关键字、隐匿代码块的学习
  4. 如果使用半导体RFID读写器CK-S640-AP60E读取RI-TRP-DR2B-40的UID信息
  5. 上网行为安全之终端识别和管理技术
  6. JELLY技术周刊 Vol.24 -- 技术周刊 · 实现 Recoil 只需百行代码?
  7. 记YY的一次面试经历
  8. oracle归档切换,oracle 切换归档方式
  9. 礼金记账本安卓_份子钱记账本-全民都爱用的随礼管理手账神器
  10. 【R语言技巧】apply篇 sumNotes