iOS开发随笔iOS新手学习

iOS 图片+文字上传服务器

2017-12-14  本文已影响3人  西贝人立口

项目遇到一个问题就是文字+图片使用post一起上传,如下图

效果图
在此记录下上传过程中遇到的一些情况。
首先基于AFN封装图片上传的方法 网络封装1 网络封装1.1
其次,在图片选择代理方法里面把选择的图片数组赋值给一个全局变量数组imageArray, 图片选择器代理方法
在上传图片的网络请求方法里面这样写: 上传方法
至此全部完成,如果在上传图片的方法里面没有走失败这个方法,那基本说明是成功的。那么在后台查看是否上传成功, 后台显示 如上图所示在后台查看显示的是图片二字,没有显示上传的图片,有种情况是使用内网上传的话在Mac系统上无法显示,所以查看网页源码 源码 上图中<img src=“”>是有内容的那说明上传图片是成功的。
封装上传代码如下:
#pragma mark - 底层的上传图片的网络封装
-(void)NetWorkOfAFNWithURL:(NSString *)url WithParam:(NSMutableDictionary*)dic ImagesArray:(NSArray*)imageArray Success:(HttpSuccess)success Failure:(HttpFailure)falilure{
    AFHTTPSessionManager*manager = [AFHTTPSessionManager manager];
    // 参数
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    
    [manager POST:url parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {        /******** 1.上传已经获取到的img *******/
        // 把图片转换成data
        for (int i = 0; i < imageArray.count; i ++) {
            NSData *data = UIImageJPEGRepresentation(imageArray[i], 0.01);
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyyMMddHHmmss";
            NSString *str = [NSString stringWithFormat:@"%@_%d",[formatter stringFromDate:[NSDate date]],i];
            NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];
            //服务器上传文件的字段和类型
            [formData appendPartWithFileData:data name:fileName fileName:fileName mimeType:@"image/jpeg"];
        }
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        //上传进度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //请求成功
        if (success) success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //请求失败
        if (falilure) falilure(error);
    }];
}
上一篇下一篇

猜你喜欢

热点阅读