最近做了七牛云存储的有关内容,涉及到与后台交互获取验证的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 七牛云上传并获取图片----【客户端】的更多相关文章

  1. 七牛云上传视频并截取第一帧为图片(js实现)

    本文出自APICloud官方论坛, 感谢论坛版主 东冥羽的分享. 七牛云上传视频并截取第一帧作为视频的封面图. 使用js上传,模块videoPlayer截取第一帧(有专门的截图模块,但是我使用的有点问 ...

  2. Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况

    由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...

  3. 七牛云上传视频(后端获取tolen)

    参照网址 https://developer.qiniu.com/kodo/sdk/1242/python #pip install qiniufrom qiniu import Auth #需要填写 ...

  4. laravel中的文件上传到本地+七牛云上传

    首先在filesystems.php 配置好上传的文件的目录起名为upload 在Storage/目录下面 目录下面的app/upload 如果没有这个文件会自动创建 这里的名字upload名字是跟控 ...

  5. thinkphp3.2使用七牛云上传文件

    最近项目中用到了七牛云服务,来分享一下thinkphp使用七牛云来进行文件上传 1.首先在七牛云创建一个空间,例如空间名为test.获取secrectKey,accessKey 2.在thinkphp ...

  6. iUploader 2.0 七牛云上传工具

    iUploader 软件介绍: iUploader主要功能将文件上传至七牛云,返回 Markdown 格式的链接到剪贴板 功能介绍: 图片本地压缩 图片右键上传 图片截取上传 图片复制上传 图片拖拽上 ...

  7. thinkphp 中 使用七牛云上传

    利用七牛云私有空间存储文件 第一步,注册七牛云,创建空间,将空间设为私有 需要记下的东西: AK,SK,bucket 第二步配置ThinkPHP 在config.php添加 'UPLOAD_SITEI ...

  8. Go --- 七牛云 上传文件 & Token demo

    package main import ( "bytes" "crypto/hmac" "crypto/sha1" "encodi ...

  9. 七牛云-上传、删除文件,工具类(Day49)

    要求: 1. java1.8以上 2. Maven: 这里的version指定了一个版本范围,每次更新pom.xml的时候会尝试去下载7.5.x版本中的最新版本,你可以手动指定一个固定的版本. < ...

随机推荐

  1. saiku执行过程代码跟踪

    使用了很久的saiku,决定跟踪一下代码,看看它的执行核心过程: 一.入口controller代码 1.1.页面打开之后,会发送一个ajax请求 Request URL: http://l-tdata ...

  2. 浅析 mondrian 模式文件 Schema

    1.前言 前面几篇文章一经介绍过saiku.模式文件和MDX的关系.通俗点说模式文件(Schema)就是一个xml,里面定义了一个虚拟立方体,共MDX查询语言使用. 2.模式文件 Schema 最顶层 ...

  3. ivqBlog 开源博客 (angularjs + express + mongodb)

    转向做全职前端差不多一年的时间了,其中学习了构建工具grunt,gulp,angularjs,coffeescript,less,sass,自己想要做全栈开发,所以自学了mongodb,nodejs, ...

  4. centos6.5 尝试下用 yum 安装 oddo

    我们要安装PostgreSQL,因为OpenERP使用PostgreSQL作为它的数据库.要安装它,我们需要运行下面的命令. yum install postgresql postgresql-ser ...

  5. 直接把数据库中的数据保存在CSV文件中

    今天突然去聊就来写一个小小的demo喽,嘿嘿 public partial class Form1 : Form { public Form1() { InitializeComponent(); } ...

  6. NodeJS+Mongodb+Express做CMS博客系统

    楼主正在用业余时间开发中-- ,目前的版本仅支持会员系统,尝鲜一下吧~ hi-blog 一个 nodejs+express+mongodb 的 cms 系统 怎么启动 默认你已经安装了 mongodb ...

  7. Java工程师面试题,整理自网络与博主各种笔试面试,持续更新

    1.面向对象的特征有哪些方面? 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口. 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应.简单的说就是用同 ...

  8. sql server 调用webservice

    sql server版本2008以上,应该都可以 更改服务器配置 sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO ...

  9. UWP开发入门(十二)——神器Live Visual Tree

    很久以前,我们就有Snoop这样的工具实时修改.查看正在运行的WPF程序,那时候调个样式,修改个模板,相当滋润.随着历史的车轮陷进WP的泥潭中,无论WP7的Silverlight还是WP8.1的run ...

  10. [ASP.NET]谈谈IIS与ASP.NET管道

    作为一个Asp.Net平台开发者,非常有必要了解IIS和Asp.Net是如何结合,执行我们的托管代码,以及Asp.Net管道事件的. 本节目录 IIS 5.X IIS 6 IIS 7+ 集成模式 As ...