网络ios开发iOS Developer

iOS 图片上传至服务器

2017-01-18  本文已影响1054人  雨墨丫头

在做项目的时候, 我们会遇到用户头像上传至服务器的功能, 还有就是用户发表动态选择本地图片上传服务器的功能.但总归就一句话:就是把图片上传到服务器.

我这里是利用AFN第三方, 如果不打算利用三方的, 也可以自己试试写,其实很简单, 但我个人觉得AFN已经很强大了, 并且现在很多人都在用, 你也不妨利用AFN, 大牛的话一般都是直接自己敲的, 嘿嘿, 我还是一个小罗罗, 跟大牛不能比啊, 还有很长的一段路要走呢, 不说了, 小不点带大家看一下上传至服务器的步骤吧!

首先, 后台会给你一个上传图片到服务器的地址, 其次, 你需要根据拼接参数, 然后进行数据请求, 数据请求成功后, 服务器会返回来图片的地址, 你拿到地址后, 将图片再上传

下面看代码

- (void)upLoadImage {
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer.timeoutInterval = 20;
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"application/json", @"text/html", @"text/json", nil];
    NSString *urlStr = [NSString stringWithFormat:@"%@/%@", kHomeDefaultUrl, kUploadImageUrl];
    NSDictionary *dic = @{@"id":@"0"};
    //根据当前系统时间生成图片名称
    NSDate *date = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"yyyy年MM月dd日"];
    NSString *dateStr = [formatter stringFromDate:date];
    _i = 0;
    
    [manager POST:urlStr parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        [self.hud hide:YES];

    for (UIImage *image in _array) {
        NSString *fileName = [NSString stringWithFormat:@"%@%ld.png",dateStr,_i];
        
        NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
        float size = imageData.length/1024.0/1024.0;
        if (size>=1) {
            imageData = UIImageJPEGRepresentation(image, 0.3);
        }else{
            imageData = UIImageJPEGRepresentation(image, 0.5);
        }
      
        [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%ld",_i] fileName:fileName mimeType:@"image/jpeg"];
          _i++;
    }
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            NSLog(@"进度");
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"上传成功");
            NSDictionary *returnDic = [NSDictionary dictionaryWithDictionary:responseObject];
            if ([[returnDic objectForKey:@"ac"] isEqualToString:@"success"]) {
                NSDictionary *photoDic = [NSDictionary dictionaryWithDictionary:[returnDic objectForKey:@"photos"]];
               NSLog(@"这里将你得到的图片地址拿到, 做接下来上传图片的步骤");
            }
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"上传失败");
        }];

}

其中_array中我放的是图片, 你可以上传多张图片到服务器, 你如果上传多张图片,发现服务器返回的图片地址是一样的, 说明, 服务器名字写重了, 由于我们是以日期为名命名的, 在上传多张图片的时候容易写重, 毕竟服务器那边还分辨不了这么多, 你需要做的就是一张一张上传, 不要在上面的代码里循环, 要在外面循环呦!

你觉得怎么样呢? 欢迎多多指正呦!
// 转载请注明原地址呦!

上一篇 下一篇

猜你喜欢

热点阅读