七牛上传图片的了解与使用

作者: Jabber_YQ | 来源:发表于2016-07-29 10:06 被阅读550次

    在平时所做的小项目中,没有使用过七牛这样的第三方库来上传保存图片,一般都只是保存在服务器的电脑里。
    例如,在修改个人信息的时候,上传图片和修改信息都是使用同一个接口。

        // 获得请求管理者
        AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
        
        // 发送GET请求
        [mgr POST:url parameters:para constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            
            UIImage *image = self.iconView.image;
            NSData *data = UIImageJPEGRepresentation(image, 0.3);
            
            //拼接文件参数
            [formData appendPartWithFileData:data name:@"pic" fileName:@"status.jpg" mimeType:@"image/jpeg"];
            
        } success:^(AFHTTPRequestOperation *operation, NSDictionary *resultDict) {
    
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    
        }];
    

    在上传头像的同时把各种参数都传了上去。
    当我看到七牛的时候一脸懵逼,这是什么意思,图片保存到七牛,那服务器怎么把图片和用户联系起来,或者说,当我访问我的信息的时候,服务器是怎么把我的头像在七牛那么多照片中挑出来给我的。
    因为用七牛上传的代码是这样的:

    [[RequestManager shareInstance] POST:@"getToken.aspx" parameters:qnParam success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            if ([responseObject[@"resultCode"] isEqual:@"0000"]) {
                NSString *token = responseObject[@"data"][@"token"];
                QNUploadManager *uploadManager = [[QNUploadManager alloc] init];
                NSMutableArray *keys = [NSMutableArray array];
                for (NSInteger i = 0; i < _images.count; i ++) {
                    NSData *data = [_images[i] rmk_resizedAndReturnData];
                    [uploadManager putData:data key:_keys[i] token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
                        [keys addObject:key];
                        if (keys.count == _images.count) {
                            !resultHandler ?: resultHandler(keys, nil);
                        }
                    } option:nil];
                }
            } else {
                !resultHandler ?: resultHandler(nil, responseObject[@"resultMsg"]);
            }
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            !resultHandler ?: resultHandler(nil, error.description);
        }];
    

    上面的代码是使用七牛上传照片,可以看到是通过getToken.aspx接口获得token。

     NSString *token = responseObject[@"data"][@"token"];
    

    获得完token完以后再用七牛的方法传上去:

    [uploadManager putData:data key:_keys[i] token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) { 
          [keys addObject:key]; 
          if (keys.count == _images.count) { 
              !resultHandler ?: resultHandler(keys, nil); 
          }
    } option:nil];
    

    高潮来了,我发现,传上去一张,就会有一个key返回,其实这个key和 http://o79izl3a1.bkt.clouddn.com/ 拼接起来,就是这张图片的地址了。
    所以,其实七牛的上传图片的流程是,把图片上传上去保存到七牛中,如果成功,他会返回你一个key,把key保存到参数的字典中,然后一起发给服务器,这样服务器就知道你的照片的路径了,下一次访问信息的时候,服务器直接给你照片路径,这样就解决了问题。

    相关文章

      网友评论

        本文标题:七牛上传图片的了解与使用

        本文链接:https://www.haomeiwen.com/subject/moczjttx.html