Objective-C SDK 使用指南
SDK下载
- Objective-C SDK 下载地址:https://github.com/qiniu/objc-sdk/releases
- Objective-C SDK 源码地址:https://github.com/qiniu/objc-sdk
- Objective-C SDK 单元测试:https://github.com/qiniu/objc-sdk/tree/master/QiniuSDKTests
- Objective-C SDK 在线文档: http://cocoadocs.org/docsets/Qiniu/
或者使用Cocoapods 进行安装,命令如下
pod "Qiniu", "~> 7.0"
本SDK同时支持Mac和iOS,会根据文件大小自动选择mulipart form直传还是断点续上传。
环境准备
本SDK为客户端SDK,没有包含token生成实现,为了安全,token都建议通过网络从服务端获取,具体生成代码可以参考java/python/php/ruby/go等服务端sdk。
上传文件
#import <QiniuSDK.h>
...
NSString token = @"从服务端SDK获取";
QNUploadManager *upManager = [[QNUploadManager alloc] init];
NSData *data = [@"Hello, World!" dataUsingEncoding : NSUTF8StringEncoding];
[upManager putData:data key:@"hello" token:token
complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSLog(@"%@", info);
NSLog(@"%@", resp);
} option:nil];
...
注意: key及所有需要输入的字符串必须采用utf8编码,如使用非utf8编码访问七牛云存储将反馈错误
关于option参数
一般情况下,开发者可以忽略 put 方法中的 option 参数,即在调用时保持 option 的值为 nil 即可。但对于一些特殊的场景,我们可以给 option 传入一些高级选项以更精确的控制上传行为,获取进度信息。
option QNUploadOption 类型,其中包含变量:params,mimeType,checkCrc,progressHandler, cancelSignal。
mimeType
为上传的文件设置一个自定义的 MIME 类型,如果为空,那么服务端自动检测文件的 MIME 类型。
checkCrc
checkCrc 为 NO 时,服务端不会校验 crc32 值,checkCrc 为 YES 时,服务端会计算上传文件的 crc32 值,然后与用户提供的 crc32 参数值相比较确认文件的完整性,如果校验失败会返回 406 错误。
params
用户自定义参数,必须以 “x:” 开头,这些参数可以作为变量用于 upToken 的 callbackBody,returnBody,asyncOps 参数中,具体见:自定义变量。简单的一个例子为:
QNUploadOption *opt = [[QNUploadOption alloc] initWithMime:@"text/plain" progressHandler:nil params:@{ @"x:foo":@"fooval" } checkCrc:YES cancellationSignal:nil];
[upManager putData:data key:@"hello" token:token
complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSLog(@"%@", info);
NSLog(@"%@", resp);
} option:opt];
上传进度
上传进度的block 为
typedef void (^QNUpProgressHandler)(NSString *key, float percent);
如果实现了这个block, 并作为option参数传入,会及时得到上传进度通知。
取消上传
如果希望中途可以取消上传,需要实现下面的block,并作为参数传入option
typedef BOOL (^QNUpCancellationSignal)(void);
当进行取消操作时,让这个函数返回YES,这样上传中途即可停止,具体可参考 QNFileRecorderTest.m 这个测试中的例子。
失败或取消后继续上传
本SDK实现了断点续上传,如果需要保存上传进度,需要您在生成UploaderManager 实例时传入一个实现了进度保存的代理,SDK自带了将进度保存到文件的方法,您可以自己实现其他保存方式。具体可参考 QNFileRecorderTest.m 这个测试中的例子。
NSError *error;
QNFileRecorder *file = [QNFileRecorder fileRecorderWithFolder:@"保存目录" error:&error];
//check error
QNUploadManager *upManager = [[QNUploadManager alloc] initWithRecorder:file];
代码参考
本SDK代码都有对应的单元测试检查,如果需要实现某个功能,参考单元测试可以很快获得答案。
常见问题
- 如果碰到crc链接错误,请把libz.dylib加入到项目中去。
- 如果需要支持iOS 5 或者支持restKit, 请用 AFNetworking 1.x 分支的版本
- 如果碰到其他编译错误,请参考 Cocoapods 的 troubleshooting
许可证
MIT 许可证 Copyright © 2012-2014 qiniu.com
如果有任何问题,请进入 七牛云存储问答社区 或者发送 工单 咨询