最简单的实现方式上传图片
淘宝,天猫,酒店等App,都牵涉到对其中提供的服务评分的功能。今天先从上传图片开始说起,一般创业型的公司,自己公司的服务器实现存储和处 理主业务逻辑。其他服务包括云推送和云存储数据都是存放在第三方提供的服务器中。当我们上传图片等信息的时候,存放在第三方平台中,在上传的时候获取 hash或者key作为该用户上传的唯一标示符。然后当App需要展示数据的时候就需要让自己公司的服务器根据唯一标示,去请求第三方平台,将请求的数据 拉取到公司服务器中。然后公司服务器将数据发送给客户端。这就是大体的图片上传和图片获取。
#pragma mark -上传图片到七牛服务器
- (void)uploadImage{
//give token
//请求服务器的临时uPtoken
NSString *str=[NSString stringWithFormat:@"http://weixin2.imike.cn/qiniu/uptoken"];
NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *requests = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operations = [[AFHTTPRequestOperationalloc]initWithRequest:requests];
[operations setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, idresponseObject){
id dict=[NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
// NSLog(@"获取到的数据为:%@",dict);
NSLog(@"%@",dict[@"uptoken"]);
// _token = dict[@"uptoken"];
_token = [NSString stringWithFormat:@"%@",dict[@"uptoken"]];
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"发生错误!%@",error);
}];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operations];
_dataArray = [[NSMutableArray alloc]init];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
_dataSource = appDelegate.sourceArray;
for (UIImage *imageView in _dataSource) {
#pragma mark -此时如果重新选择,那么需要将会上传两次选择的图片
// NSLog(@"%@",_dataSource);
if (UIImagePNGRepresentation(imageView)) {
//返回为png图像。
_data = UIImagePNGRepresentation(imageView);
}else {
//返回为JPEG图像。
_data = UIImageJPEGRepresentation(imageView, 1.0);
}
[_dataArray addObject:_data];
}
//这里考虑使用异步线程上传图片的方法
[self initConcurrent];
}
-(long long)getRandomNumber:(long long )from to:(long long )to
{
return (long long)(from + (arc4random() % (to-from + 1)));
}
//并行队列
- (void)initConcurrent{
//创建出队列
GCDGroup *group = [[GCDGroup alloc]init];
GCDQueue *queue = [[GCDQueue alloc]initConcurrent];
for (int i = 0; i < _dataArray.count; i++) {
[queue execute:^{
QNUploadManager *upManager = [[QNUploadManager alloc] init];
[upManager putData:[_dataArray objectAtIndex:i] key:[NSStringstringWithFormat:@"iOS上传图片组%1lld",[self getRandomNumber:1 to:11111111111111111]]token:_token
complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSLog(@"%@", info);
NSLog(@"%@", resp);
} option:nil];
} inGroup:group];
}
}