iOS 上传多张图片和文字到自己的服务器

首先对上传多种图片到服务器利用了万能的AFNetworking进行了封装.上代码代码不多。 封装的网络接口的.h中

/**
 上传多张图片方法
 
 @param imagesArray      上传的图片
 @param url        请求连接,根路径
 @param filename   图片的名称(如果不传则以当时间命名)
 @param name       上传图片时填写的图片对应的参数 服务器规定的
 @param params     参数
 @param progress   上传进度
 @param responseStyle 请求数据的格式
 @param success    请求成功返回数据
 @param fail       请求失败
 
 */

+ (void)moreLoadWithImage:(NSMutableArray *)imagesArray
                      url:(NSString *)url 
                 filename:(NSString *)filename
                     name:(NSString *)name
                   params:(NSDictionary *)params
                 progress:(upLoadProgress)progress
              andResponse:(JYJResponseStyle)responseStyle
                  success:(successBlock)success
                     fail:(failureBlock)fail;

复制代码

.m中

+(void)moreLoadWithImage:(NSMutableArray *)imagesArray url:(NSString *)url filename:(NSString *)filename name:(NSString *)name    params:(NSDictionary *)params progress:(upLoadProgress)progress andResponse:(JYJResponseStyle)responseStyle  success:(successBlock)success fail:(failureBlock)fail {
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    // 检测网络连接的单例,网络变化时回调方法
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"网络状态 = %ld", status);
    }];
    
    // 1. 设置网络管理者
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
   
    // 3. 设置返回数据的类型
    switch (responseStyle) {
        case JYJJSON:
            manager.responseSerializer = [AFJSONResponseSerializer serializer];
            break;
        case JYJXML:
            manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
            break;
        case JYJDATA:
            manager.responseSerializer = [AFHTTPResponseSerializer serializer];
            break;
            
        default:
            break;
    }
    
    // 4. 设置响应数据类型
    
    [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", @"application/javascript",@"image/jpeg", @"text/vnd.wap.wml", @"application/x-javascript",@"image/png", nil]];
    
    
    // 5. UTF-8转码
    
    url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    [manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        for (NSInteger i = 0; i < imagesArray.count; i ++) {
            
            //压缩图片
            NSData *imageData = UIImageJPEGRepresentation(imagesArray[i], 0.5);
            NSString *imageFileName =filename;
            if (filename == nil || [filename isKindOfClass:[NSString class]] || filename.length == 0) {
                NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
                formatter.dateFormat = @"yyyy-MM-dd-HH-mm-ss";
                NSString *str = [formatter stringFromDate:[NSDate date]];
                imageFileName = [NSString stringWithFormat:@"%@.jpg",str];
            }
            //上传图片,以文件流的格式
            [formData appendPartWithFileData:imageData name:name fileName:imageFileName mimeType:@"image/jpeg"];
            
        }
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        NSLog(@"上传速度--%lld,总进度--%lld",uploadProgress.completedUnitCount,uploadProgress.totalUnitCount);
        if (progress) {
            progress(uploadProgress.completedUnitCount,uploadProgress.totalUnitCount);
        }
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"上传图片成功-%@",responseObject);
        if (success) {
            success(responseObject);
        }
        
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error=%@",error);
        if (fail) {
            fail(error);
        }
        
    }];
    
}

复制代码

各种参数已经写得很清楚了。在哪个地方用直接调用就行。 我自己封装的网络类叫(JYJ_NetWorkParser) //再说一遍吧 第一个参数:图片数组 第二个参数:后台给的接口 第三个参数:随便起个名字 第四个参数:后台给你的一个字段(和后台保持一致) 第五个参数:参数(可以放文字描述 ) 第六个参数:上传进度 第七个参数:请求数据的格式 第八第九个:请求成功、失败返回的数据

[JYJNetWorkParser moreLoadWithImage:self.imageArray url:kPostMessageURL filename:@"myImages" name:@"files" params:dic progress:nil andResponse:JYJJSON success:^(id result) {


}fail:^(NSError *error) {
        
      }];
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值