第一种:以文件流的形式上传图片。
formDate 设置数据name:@“改为传给后台的参数名”
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//接收类型不一致请替换一致text/html或别的
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",
@"text/html",
@"image/jpeg",
@"image/png",
@"application/octet-stream",
@"text/json",
nil];
//AppDelegate *myDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
// NSDictionary *dic = @{@"id":myDelegate.userId};
NSURLSessionDataTask *task = [manager POST:url parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSData *imageDatas = imageData;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];
//上传的参数(上传图片,以文件流的格式)
[formData appendPartWithFileData:imageDatas
name:@"photo"
fileName:fileName
mimeType:@"image/jpeg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
//打印下上传进度
NSLog(@"上传进度");
NSLog(@"%@",uploadProgress);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//上传成功
NSLog(@"上传成功");
NSLog(@"%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//上传失败
NSLog(@"上传失败");
}];
第二种:将image转成NSData,在进行base64加密上传。
//获取照片的代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
UIImage *image = [[UIImage alloc] init];
if ([mediaType isEqualToString:@"public.image"]){
image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[_headimage setImage:image];
// [_changeBtn setImage:image forState:UIControlStateNormal];
NSData *data;
if (UIImagePNGRepresentation(image) == nil) {
data = UIImageJPEGRepresentation(image, 1);
} else {
data = UIImageJPEGRepresentation(image, 0.001); //压缩图片,方便上传
}
// //获取文件路径
NSString *imageString = [data base64EncodedStringWithOptions:0];
转成base64字符串imageString,再传给给后台,在传参中需要添加图片的类型(@“png”或@“jpg”等)}
[picker dismissViewControllerAnimated : YES completion : nil ];
}