iOS集成七牛对象存储
项目中在使用七牛存储图片,文档地址对象存储
官方SDK给的Demo例子,处理逻辑是这样的:
- 选择图片后,将图片copy到沙盒中
- 获得沙盒中图片的路径,然后上传图片
- 上传图片之前要有一个token,该token一般是在服务端生成
- (void)uploadImageToQNFilePath:(NSString *)filePath {
self.token = @"你的token";
QNUploadManager *upManager = [[QNUploadManager alloc] init];
QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil
progressHandler:^(NSString *key, float percent) {
NSLog(@"percent == %.2f", percent);
}
params:nil
checkCrc:NO
cancellationSignal:nil];
[upManager putFile:filePath
key:nil
token:self.token
complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSLog(@"info ===== %@", info);
NSLog(@"resp ===== %@", resp);
}
option:uploadOption];
}
需要注意的是,progressHandler
是在子线程中,如果要处理UI,要在主线程中处理
QNUploadManager
一般也只需要创建一次
Demo的例子展示的是一张图片的上传,如果有多张图片,该如何呢?
个人觉的iOS实现七牛多图片、文件上传和下载的思路不错,但实践中有一个问题是,计算进度的时候,是在多线程中调用,可能会出现2个线程,同时修改同一个数组,导致出错,所以就要加锁
另外一个问题是,上传多张图片的时候,图片的顺序会被打乱,因为成功上传回调的顺序与开始上传的顺序并不能保持一致,如果对上传图片的顺序有要求,记得要处理下