iOS-图片上传(第三方服务器)实现图片的上传和获取

最简单的实现方式上传图片

//在调用相机中获取图片  
[manager POST:naurl parameters:requestParms constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  
         // 设置时间格式(给个时间便于区分)
         NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
         formatter.dateFormat = @"yyyyMMddHHmmss";
         NSString *str = [formatter stringFromDate:[NSDate date]];
         NSString *fileName = [NSString stringWithFormat:@"%@%d",str,i];
           
          //要上传的文件(用个循环传多张)
            /**
             *    data 将图片转换成data    NSData *data=UIImagePNGRepresentation(image);
             *    name 服务器接受的name   两种格式1.数组,直接file可以穿多个进去  2.服务器端是键值 只能写file1 file2(看服务器的接受)
             *    filename 随意写
             *    mimeType 百度mime 看图片格式对应的mime
             */
          [formData appendPartWithFileData:data name:[NSString stringWithFormat:@"file%d",i+1] fileName:fileName mimeType:@"image/png"];
 
        }
 
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
       
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
    }];



淘宝,天猫,酒店等App,都牵涉到对其中提供的服务评分的功能。今天先从上传图片开始说起,一般创业型的公司,自己公司的服务器实现存储和处 理主业务逻辑。其他服务包括云推送和云存储数据都是存放在第三方提供的服务器中。当我们上传图片等信息的时候,存放在第三方平台中,在上传的时候获取 hash或者key作为该用户上传的唯一标示符。然后当App需要展示数据的时候就需要让自己公司的服务器根据唯一标示,去请求第三方平台,将请求的数据 拉取到公司服务器中。然后公司服务器将数据发送给客户端。这就是大体的图片上传和图片获取。

            公司采用的是第三方云储存。本来是又拍云,后来经过讨论决定使用七牛。本人以前没有做过这方面的研究。所以你懂得,到处都是坑。也是遇见问题解决问题,总算一个一个给解决了。
其实最坑的还是七牛的官方文档,有兴趣可以去看看,自己集成一下。现编展示一下写到现在,能够实现的效果吧。
iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  之后展示一些提交到七牛服务器的成功图片:
iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  iOS-图片上传(第三方服务器)实现图片的上传和获取 <wbr>2015-04  在这里需要注意的地方是,图片的上传使用GCD异步线程的方法。

这里贴出一部分代码:仅供参考:

#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];

    }

}

一个成功的App,需要考虑的因素有太多。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值