您的位置:首页 > 移动开发 > IOS开发

iOSBase64POST上传图片和FormData方式比较

2017-03-10 23:16 316 查看

前言:

    在我们上传图片的时候,我们最常用的方式估计就是以流的形式上传了,有些可能知道Base64为上传,有些可能不知道,现在我们仔细谈谈这个,最后我么给大家一份项目中真实用到的代码。方便理解和学习。

正文:   

    先说说Base64的好处,个人理解他可以减少HTTP请求,适合小尺寸的图片。一次性上传的图片不是特别的多,所以若大尺寸的图片或者是大批量的图片上传使用base64的话,会导致数据太大,加载过慢!这是自己所掌握知道的Base64位的好处。坏处的话就是Base64不能缓存,不能压缩.

    再说说二进制数据流FormData的形式,这个的话就不会受到图片量大的问题,上传的速度其实也是挺快的。看看Base64位的源码:

#pragma mark -- image转化成Base64位
-(NSString *)imageChangeBase64: (UIImage *)image{

NSData   *imageData = nil;
//NSString *mimeType  = nil;
if ([self imageHasAlpha:image]) {

imageData = UIImagePNGRepresentation(image);
//mimeType = @"image/png";
}else{

imageData = UIImageJPEGRepresentation(image, 0.3f);
//mimeType = @"image/jpeg";
}
return [NSString stringWithFormat:@"%@",[imageData base64EncodedStringWithOptions: 0]];
}

-(BOOL)imageHasAlpha:(UIImage *)image{

CGImageAlphaInfo alpha = CGImageGetAlphaInfo(image.CGImage);
return (alpha == kCGImageAlphaFirst ||
alpha == kCGImageAlphaLast ||
alpha == kCGImageAlphaPremultipliedFirst ||
alpha == kCGImageAlphaPremultipliedLast);
}


      上面的方法,我们就把UIImage转化成Base64位的字符串给返回了,一般在使用的时候,你接收到这个字符串之后,把它以参数的形式传给后台就可以了。

     还有一种就是我们的FormData的形式,这个大家我估计可能用的比较的频繁,问题也就不太多了,这里就直接把代码贴出来就行了:

NSDictionary *dic = @{@"memberId":[[LoginRecord shareLoginRecord] getMemberId],@"image":@"image.jpg"};

// 这里1.0是没有压缩图片
NSData *imageData =  UIImageJPEGRepresentation(_portraitImageView.image, 1.0);

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:[NSString stringWithFormat:@"%@%@",BaseUrl,UpdatePortrait] parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> formData){

if (imageData) {

NSString * type;
NSString * mimeType;
type = @"jpg";
mimeType = @"image/jpeg";
NSDate *datenow = [NSDate date];
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];
NSString * fileName = [NSString stringWithFormat:@"%@.%@",timeSp,type];
[formData appendPartWithFileData:imageData name:@"image" fileName:fileName mimeType:mimeType];

}
}success:^(AFHTTPRequestOperation *operation, id responseObject){

ShowMessage(@"上传成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error){

ShowMessage(@"上传失败");
}];


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: