iOS-带参数的图片上传(适用于不太懂后端的小白~)

iOS-带参数的图片上传

一、现有的两种上传方式

    1. AFNetwork上传

    2.NSURLMutableRequest上传

   (ps:这两种方式,很多博客上已经有了就不需要我在这里再次说明了)

二、我在上传图片时遇到的问题

     上面提到的两种方式我都用过了,但是后台一直返回400的信息,也没有接收到我发的消息,可以说十分苦恼。我先说明一下后台是如何接收的(后端使用的是Springboot)

 

  对于这个带参数的图片上传工作来说,正常情况下使用AFNetwork的 

 [Imagesession POST:@"自己的url" parameters:需要上传的参数 headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData)

【AFHTTPSessionManager *Imagesession】来实现的,但是我却因为这样的实现方式导致后台并不能识别我的请求消息,导致我上传一直失败

三、问题的根源

     我前端使用OC,后端使用java,这样难免会导致在一些属性定义上存在差异,而且由于我初期接触ios并没有对用户类进行有一个单独的定义,所以在之前我的上传数据过程中一直是需要借助页面中传参,使用时直接定义的方式来进行传输的,加上我对后端及java没有什么了解,导致我并不知道这个参数需要按照文件的方式进行传输(其实这块我也不太理解),就导致出现了上面的问题。

四:问题解决

   formdata追加参数。具体我上一下代码:

带参数图片上传完整代码实现:       

       AFHTTPSessionManager *Imagesession = [[AFHTTPSessionManager alloc]init];

        Imagesession = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:@"自己的url(写到端口)"]];

        Imagesession.responseSerializer = [AFJSONResponseSerializer serializer];

        Imagesession.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"text/javascript", @"text/json", @"text/html", nil];

        NSDictionary *params =@{XXXX自己定义};

        [Imagesession POST:@"url的剩余部分" parameters:params headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) { 

            [formData appendPartWithFileData:[params yy_modelToJSONData] name:@"需要和后端协调的名字" fileName:@"需要和后端协调的名字" mimeType:@"application/json;charset=utf-8"];

            UIImage *image = [UIImage imageNamed:@"imgtest"];//自己的图片

            NSData *imagedata = UIImageJPEGRepresentation(image, 0.5);

            [formData appendPartWithFileData:imagedata name:@"file" fileName:@"图片名字.jpg" mimeType:@"image/jpg"];

            } progress:^(NSProgress * _Nonnull uploadProgress) {

                //        NSLog(@"%fA",uploadProgress.fractionCompleted);

            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

                NSLog(@"上传成功");

            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

                NSLog(@"上传失败");

                NSLog(@"%@C",error);

                NSLog(@"error ==%@", [error userInfo][@"com.alamofire.serialization.response.error.string"]);

            }];

        

posted on 2021-10-25 21:24  suanningmeng98  阅读(415)  评论(0编辑  收藏  举报