iOSBase64POST上傳圖片和FormData方式比較

前言:

    在咱們上傳圖片的時候,咱們最經常使用的方式估計就是以流的形式上傳了,有些可能知道Base64爲上傳,有些可能不知道,如今咱們仔細談談這個,最後我麼給你們一份項目中真實用到的代碼。方便理解和學習。緩存

正文:   

    先說說Base64的好處,我的理解他能夠減小HTTP請求,適合小尺寸的圖片。一次性上傳的圖片不是特別的多,因此若大尺寸的圖片或者是大批量的圖片上傳使用base64的話,會致使數據太大,加載過慢!這是本身所掌握知道的Base64位的好處。壞處的話就是Base64不能緩存,不能壓縮.app

    再說說二進制數據流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位的字符串給返回了,通常在使用的時候,你接收到這個字符串以後,把它以參數的形式傳給後臺就能夠了。spa

     還有一種就是咱們的FormData的形式,這個你們我估計可能用的比較的頻繁,問題也就不太多了,這裏就直接把代碼貼出來就好了:code

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(@"上傳失敗");
     }];
相關文章
相關標籤/搜索