【问题标题】:Get Corrupt data from server while upload image上传图片时从服务器获取损坏的数据
【发布时间】:2016-06-23 06:52:45
【问题描述】:

我成功将图像转换为 base64 字符串,但是当我服务到服务器时,服务器得到损坏的数据 我正在使用http://codebeautify.org/base64-to-image-converter# 来获得正确的图像输出

 NSString *base64String=[UIImagePNGRepresentation(ProfileImageView.image)
    base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
 [base64String stringByReplacingOccurrencesOfString:@"\n\r" withString:@""];
 [base64String stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];  


   NSString *post =[[NSString alloc] initWithFormat:@"UserId=%@&UserName=%@&Password=%@&Email=%@&MobileNo=%@&Profiledata=%@",[_DicData valueForKey:@"userId"],[_DicData valueForKey:@"userName"],[_DicData valueForKey:@"password"] ,[_DicData valueForKey:@"email"],MobileNumberLable.text,base64String];

    NSString *strurl2=@"api/UpdateUserProfledata/";
    NSString *strurl=[NSString stringWithFormat:@"%@%@",_Url1,strurl2];
    NSURL *url=[NSURL URLWithString:strurl];
    NSData *postData= [post dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *req=[[NSMutableURLRequest alloc]initWithURL:url];

    NSString *authtoken=[NSString stringWithFormat:@"ios %@",[_DicData valueForKey:@"authToken"]];
    [req setValue:authtoken forHTTPHeaderField:@"Authorization"];

    [req setHTTPMethod:@"POST"];
    [req setHTTPBody:postData];
    NSHTTPURLResponse *urlResponse = nil;
    NSError *err = [[NSError alloc] init];
    NSData *responseData = [NSURLConnection sendSynchronousRequest:req returningResponse:&urlResponse error:&err];
    NSLog(@"%@",[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding]);

当我从我身边转换图像时,我得到 总字符 =133624 总字数 =0 但是当服务器转换它时 总字符 =133624 总字数 =2891 帮帮我!

.net 中图像转换器的后端代码

公共用户视图模型更新用户配置文件数据(用户视图模型用户更新) { 用户视图模型模型 = 新用户视图模型(); if (userupdate != null && userupdate.UserId > 0) { var getuser = _unitOfWork.UserRepository.GetMany(x => x.UserId == userupdate.UserId).ToList(); 如果 (getuser.Count() > 0) { foreach(getuser 中的 var 项) { item.UserName = userupdate.UserName; item.Email = userupdate.Email; item.MobileNo = userupdate.MobileNo; if (!string.IsNullOrEmpty(userupdate.Profiledata)) { var img = GetBytes(userupdate.Profiledata); item.ProfilePhoto = img; } 模型.Profiledata = userupdate.Profiledata.Trim(); _unitOfWork.UserRepository.Update(item); _unitOfWork.Save(); 返回模型; } } } 返回模型; } 静态字节[] GetBytes(字符串 str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 返回字节; }

【问题讨论】:

    标签: ios json uiimage uiimagepickercontroller


    【解决方案1】:
    NSData *dataImage=UIImageJPEGRepresentation(yourImage, 1);
    NSString *base64String = [self base64forData:dataImage];
    

    在您的请求中将此base64String 传递给服务器。

    试试这个base64编码:

    - (NSString*)base64forData:(NSData*)theData
    {
        const uint8_t* input = (const uint8_t*)[theData bytes];
        NSInteger length = [theData length];
    
        static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
        NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
        uint8_t* output = (uint8_t*)data.mutableBytes;
    
        NSInteger i;
        for (i=0; i < length; i += 3) {
            NSInteger value = 0;
            NSInteger j;
            for (j = i; j < (i + 3); j++) {
                value <<= 8;
    
                if (j < length) {
                    value |= (0xFF & input[j]);
                }
            }
    
            NSInteger theIndex = (i / 3) * 4;
            output[theIndex + 0] =                    table[(value >> 18) & 0x3F];
            output[theIndex + 1] =                    table[(value >> 12) & 0x3F];
            output[theIndex + 2] = (i + 1) < length ? table[(value >> 6)  & 0x3F] : '=';
            output[theIndex + 3] = (i + 2) < length ? table[(value >> 0)  & 0x3F] : '=';
        }
    
        return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] ;
    }
    

    【讨论】:

    • 这是什么静态字符表[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; ? @Bhadresh Mulsaniya
    • 它用于将您的图像数据字符转换为二进制格式购买与0x3F的操作。
    • 你试过这个分类github.com/yllan/FoundationAddition 吗?
    • 谢谢兄弟,但我无法从您的类别中得到任何想法
    • 你有没有尝试过?
    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多