上传图片分为两种 :一种是只上传图片,一种是即上传图片又上传文字。
一.只上传图片,代码如下
- (void)httpRequestUploadMeHeadImageWithFile:(UIImage *)file UUID:(NSString *)UUID error:(void (^)(NSError *))err{ NSString *url = [NSString stringWithFormat:@"%@图片上传地址"]; NSDictionary *parametes; if ( UUID.length) {//图片参数,登录后的UUID,根据你参数添加所需要的参数 parametes = @{@"UUID":UUID}; }else{ return ; } if (!file) { return; } AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //请求图片,请求网页时需要加入这句,因为AFN默认的请求的是json // application/json [manager.requestSerializer setValue:/**@"multipart/form-data"*/@"application/json" forHTTPHeaderField:@"Content-Type"]; //请求头 [manager POST:url parameters:parametes constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { NSData *data = UIImagePNGRepresentation(file); //下面的方式也可以 // NSData *data = UIImageJPEGRepresentation(pic, 1.0); NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 设置时间格式 formatter.dateFormat = @"yyyyMMddHHmmss"; NSString *str = [formatter stringFromDate:[NSDate date]]; NSString *fileName = [NSString stringWithFormat:@"%@.png", str]; // 特别注意,这里的图片的名字不要写错,必须是你接口的图片的参数名字如我这里是file [formData appendPartWithFileData:data name:@"file" fileName:fileName mimeType:@"image/png"]; } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"responseObject===>%@",responseObject); if (err) { err(nil); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"task------>%@error------> %@",task,error); if (err) { err(error); } }]; }
二. 即上传图片又上传文字,只需将Content-Type改为@"multipart/form-data"和 parametes参数字典中加入你要拼接文字的参数名称即可。
[manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
三. 可能出现的错误
1.如果返回错误码为-1001,需将Content-Type设置为@"application/json"可图片参数的名字,[formData appendPartWithFileData:data name:@”图片参数的名字“ fileName:fileName mimeType:@"image/png"]和NSData *data = UIImagePNGRepresentation(图片名字的地址)一致且是你接口参数的名字;
时间: 2024-11-05 20:44:10