iOS 七牛云上传并获取图片----【客户端】
最近做了七牛云存储的有关内容,涉及到与后台交互获取验证的token,无奈,后台自命清高,不与理会,没办法呀,于是自己搞呗。首先呢在在七牛上注册一个账号,然后呢添加一个存储空间这时候空间名是用来识别存储空间的位置,而地区的选择则是设置存储七牛服务器的位置,那么选择一个公开空间免费试用就可以了~~
创建好账号就是查看官方文档编写demo的流程了,顺便附带一个下载地址:http://developer.qiniu.com/code/v7/sdk/objc.html 下载来看了下七牛关于ios开发的demo 使用cocopod 管理的。天啊,最近的项目一直没用它,担心更新的问题会不会造成不能使用了。。。。。。果真,由于软件的ruby 版本过低,更新不了第三方的库,只好又升级了一下第三方的库,具体升级方式请参考http://www.cnblogs.com/gfxxbk/p/5536397.html…这样很快就会更新好,但是呢里面也有涉及到的一部分升级失败的情况,一般都会有错误提示,对应的查找就能解决。我升级的时候是版本号写的过高了,导致一直找不到对应的类库,所以升级的时候不必写太高,2.2.2版本就好顺便附带一些解决方法http://blog.csdn.net/springjustin/article/details/51836968
终于一切环境需求都准备好了,那就直接引入呗,这时pod导入之后,因为之前的升级,所以一般不会出现文档中提到的错误,很顺利的引入了这个类库。这时候的关键是获得验证的token 在官方文档中这个token 是要从自己的后台服务器获得的,没办法,后台不配合也只能自己动手丰衣足食了。
首先这个token 是用作验证使用的,,官方建议使用后台生成后,客户端再获取使用。但客户端也能独自生成具体生成方法如下:
-(void)createToken { if (!self.scope.length || !self.accessKey.length || !self.secretKey.length) {
return;
} // 将上传策略中的scrop和deadline序列化成json格式
NSMutableDictionary *authInfo = [NSMutableDictionary dictionary];
[authInfo setObject:self.scope forKey:@"scope"];
[authInfo
setObject:[NSNumber numberWithLong:[[NSDate date] timeIntervalSince1970] + self.liveTime * * ]
forKey:@"deadline"]; NSData *jsonData =
[NSJSONSerialization dataWithJSONObject:authInfo options:NSJSONWritingPrettyPrinted error:nil]; // 对json序列化后的上传策略进行URL安全的base64编码
NSString *encodedString = [self urlSafeBase64Encode:jsonData]; // 用secretKey对编码后的上传策略进行HMAC-SHA1加密,并且做安全的base64编码,得到encoded_signed
NSString *encodedSignedString = [self HMACSHA1:self.secretKey text:encodedString]; // 将accessKey、encodedSignedString和encodedString拼接,中间用:分开,就是上传的token
NSString *token =
[NSString stringWithFormat:@"%@:%@:%@", self.accessKey, encodedSignedString, encodedString]; self.uploadToken = token; }
有关函数的调用为:将进行URL安全的base64编码:
- (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;
}
对上传策略中进行HMAC-SHA1加密:
- (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;
}
上面涉及到三个参数,即:Scope、AccessKey、SecretKey,这三个参数是上面我们申请账号和创建空间的时候得到的,先说第一个参数: Scope : 就是空间的名字,那两个key就是在个人面板-->个人中心-->秘钥管理里面能看的到如下所示:
这样拿到了token 再写方法就简单多了,下面是针对上传图片做了一个封装的方法:
-(void)uploadImageToQNFilePath:(NSString *)filePath { QNUploadManager *upManager = [[QNUploadManager alloc] init];
QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {
NSLog(@"上传进度 %.2f", percent);
}
params:nil
checkCrc:NO
cancellationSignal:nil];
[upManager putFile:filePath key:nil token:self.uploadToken complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) { // 发送通知用户获取图片使用
NSNotification * notice =[NSNotification notificationWithName:@"downLoad" object:nil userInfo:resp];
[[NSNotificationCenter defaultCenter] postNotification:notice]; } option:uploadOption]; }
这样就可以将图片上传上去了 此时我们可以得打两个返回值 形式如下:
这个时候我们可以拿着这个返回值,拼接我们从七牛云后台获取的文件路径进行拼接使用SDWebImage就可以得到我们上传的图片
顺便说一句,当解析通知传来的字典时要注意解析的方式是否正确,否则会报错的。
iOS 七牛云上传并获取图片----【客户端】的更多相关文章
- 七牛云上传视频并截取第一帧为图片(js实现)
本文出自APICloud官方论坛, 感谢论坛版主 东冥羽的分享. 七牛云上传视频并截取第一帧作为视频的封面图. 使用js上传,模块videoPlayer截取第一帧(有专门的截图模块,但是我使用的有点问 ...
- Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况
由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...
- 七牛云上传视频(后端获取tolen)
参照网址 https://developer.qiniu.com/kodo/sdk/1242/python #pip install qiniufrom qiniu import Auth #需要填写 ...
- laravel中的文件上传到本地+七牛云上传
首先在filesystems.php 配置好上传的文件的目录起名为upload 在Storage/目录下面 目录下面的app/upload 如果没有这个文件会自动创建 这里的名字upload名字是跟控 ...
- thinkphp3.2使用七牛云上传文件
最近项目中用到了七牛云服务,来分享一下thinkphp使用七牛云来进行文件上传 1.首先在七牛云创建一个空间,例如空间名为test.获取secrectKey,accessKey 2.在thinkphp ...
- iUploader 2.0 七牛云上传工具
iUploader 软件介绍: iUploader主要功能将文件上传至七牛云,返回 Markdown 格式的链接到剪贴板 功能介绍: 图片本地压缩 图片右键上传 图片截取上传 图片复制上传 图片拖拽上 ...
- thinkphp 中 使用七牛云上传
利用七牛云私有空间存储文件 第一步,注册七牛云,创建空间,将空间设为私有 需要记下的东西: AK,SK,bucket 第二步配置ThinkPHP 在config.php添加 'UPLOAD_SITEI ...
- Go --- 七牛云 上传文件 & Token demo
package main import ( "bytes" "crypto/hmac" "crypto/sha1" "encodi ...
- 七牛云-上传、删除文件,工具类(Day49)
要求: 1. java1.8以上 2. Maven: 这里的version指定了一个版本范围,每次更新pom.xml的时候会尝试去下载7.5.x版本中的最新版本,你可以手动指定一个固定的版本. < ...
随机推荐
- pentaho saiku 安装全过程
公司希望也开发一套多维分析系统,以解决运营/产品无休止的需求和技术人力不足的矛盾! 一.开发选型: 一.BIRT:易用性差,所以没再使用 二.JasperReport+ireport:文档收费,不支持 ...
- NSURLSession与AFNetworking3.0
下面是用GET方式请求一个页面数据的示例: AFNetworking 2.x NSString *siteUrl = @"http://webinar.ofweek.com/readDemo ...
- U3D4.X版本无法安装MONODEV编辑器
可能是由于机器无法成功安装.NET 4.0的缘故
- thinkphp 3.2.3+Admin LTE后台框架
- [C++] memset 和sizeof 的使用注意
因为使用C++写小题目时经常需要清除数组,这里记录下Memset函数的sizeof运算符的使用注意. memset的特点是:将给定地址后连续的内存(包括给定地址),逐个byte初始化为参数中指明的值. ...
- Android动画效果translate、scale、alpha、rotate详解
动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...
- HTML语言特殊字符对照表(ISO Latin-1字符集)
HTML字符实体(Character Entities) 有些字符在HTML里有特别的含义,比如小于号<就表示HTML Tag的开始,这个小于号是不显示在我们最终看到的网页里的.那如果我们希望在 ...
- sudo: /etc/sudoers is mode 0777, should be 0440终极解决之道
不得不说,有时候手贱的把/etc/sudoers文件权限改了,是一件很蛋疼的事.因为此时你会发现无论做什么都会弹出一条讨厌的提示,说没有权限执行等等... 网上有介绍登入root用户,或者去grub的 ...
- ruby -- 进阶学习(五)使用Ckeditor插件上传中文图片
基于rails4.0环境 当使用Ckeditor上传中文命名图片时报错,解决方法是对图片进行重命名 在Ckeditor插件的安装目录下找到controllers/.../application.rb ...
- Linux命令:ps / top
简介:ps - report a snapshot of the current processes. 用途:获取当前时刻程序运行状态 概要:ps [options] 类型:ps is hashed ...