2013-07-25 11 views
2

我正在通過將圖像轉換爲base64格式將圖像發送到服務器。但是,問題是在發送圖像字符串後,字符'+'將被替換爲空格「」。並且顯示錯誤:錯誤 - 將圖像發送到服務器之後「損壞的JPEG數據:標記之前的214個無用字節」

Corrupt JPEG data: 214 extraneous bytes before marker 

如何解決問題?先謝謝您的幫助。

這裏是圖像轉換代碼成Base64格式:

-(NSString*)base64forData:(NSData*)theData { 

const uint8_t* input = (const uint8_t*)[theData bytes]; 
NSInteger length = [theData length]; 

static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 

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]; 
} 

這裏是轉換成JSON格式&發送該入服務器的代碼:

-(void)setOflynData2JsonFormat{ 

if (!([self.getOfflineData count] == 0)) { 

    NSArray *array = [self getOfflineData]; 

    arrayOfJsonString = [[NSMutableArray alloc]init]; 

    for (int i = 0; i<[array count]; i++) { 

     uniqueId++; 

     NSNumber *uId = [NSNumber numberWithInt:uniqueId]; 

     OfflineTableObject *offObj = [array objectAtIndex:i]; 

     NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

     [dict setValue:uId forKey:@"id"]; 
     [dict setValue:offObj.qrCode forKey:@"qrCode"]; 
     [dict setValue:offObj.offlineStatus forKey:@"activity"]; 
     [dict setValue:offObj.time forKey:@"time"]; 
     [dict setValue:offObj.imageData forKey:@"image_base64"]; 


     [arrayOfJsonString addObject:dict]; 

    } 

    NSData * jsonDataFromArray = [NSJSONSerialization dataWithJSONObject:arrayOfJsonString 
                 options:kNilOptions 
                  error:nil]; 


    NSString *string = [[NSString alloc] initWithData:jsonDataFromArray encoding:NSUTF8StringEncoding]; 

    //replace backslash from string 
    NSString *jsonString = [[NSString alloc] init]; 

    NSString *specialChar = @"\\"; 

    jsonString = [string stringByReplacingOccurrencesOfString:specialChar withString:@""]; 

    NSLog(@"sent string to server: %@",jsonString); 

    int lng = [jsonString length]; 

    NSLog(@"2nd string length: %d",lng); 


    Get_Object_Class *obj = [[Get_Object_Class alloc]init]; 

    NSString *dvid = [[UIDevice currentDevice] uniqueIdentifier]; 

    [obj sendDeviceId:dvid]; 

    NSLog(@"device id: %@",dvid); 


    int check = [obj sendOfflynData2Server:jsonString]; 

    if (check == 1) { 

     NSLog(@"Offline data uploaded"); 

     AppDelegate *test = [AppDelegate sharedInstance]; 

     [test resetOfflineTable]; 
    } 
    else{ 

     NSLog(@"Offline data upload failed"); 
    } 

} 

else{ 

    NSLog(@"Offline table is empty"); 
} 

} 

-(BOOL)sendOfflynData2Server:(NSString *)jsonRequest{ 

NSHTTPURLResponse * response = nil; 
NSError* error = nil; 

NSString * post = [NSString stringWithFormat:@"&offline_data=%@",jsonRequest]; 

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL: [NSURL URLWithString:[NSString stringWithFormat: @"%@saveofflinedata.php", APIheader]]]; 


[request setHTTPMethod:@"POST"]; 
[request setValue:jsonRequest forHTTPHeaderField:@"offline_data"]; 


NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

NSData *dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

NSString *stringReply = (NSString *)[[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding]; 

stringReply = [stringReply stringByReplacingOccurrencesOfString:@"(" withString:@"["]; 
stringReply = [stringReply stringByReplacingOccurrencesOfString:@")" withString:@"]"]; 
stringReply = [stringReply stringByReplacingOccurrencesOfString:@";" withString:@""]; 

NSLog(@"stringReply: %@", stringReply); 

SBJsonParser *parser = [[SBJsonParser alloc]init]; 
NSArray *array = [parser objectWithString:stringReply error:nil]; 
stringReply = [NSString stringWithFormat:@"%@",[[array objectAtIndex:0]objectForKey:@"success"]]; 


NSLog(@"Success: %@", stringReply); 

return [stringReply intValue]; 


} 

這裏是我發送串到服務器:

 NSString * str1 = @"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"; 

這是顯示的字符串服務器:

NSString *str2 = @"/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAZKADAAQAAAABAAAAggAAAAD/2wBDACAWGBwYFCAcGhwkIiAmMFA0MCwsMGJGSjpQdGZ6eHJmcG6AkLicgIiuim5woNqirr7EztDOfJri8uDI8LjKzsb/2wBDASIkJDAqMF40NF7GhHCExsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsb/wAARCACCAGQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 Tl5ufo6erx8vP09fb3 Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 Pn6/9oADAMBAAIRAxEAPwDeprtgdQPc1FdXUdrCZJD9B3JrnZ76S4lLO5C9lB4oEb3nLu4kzTvP2981zq3gTpxT/tp65pDN2e4VogO5NQBFchiASOmaz1ud5Xmr8ByvFAF 3IEQ UL9BUmagGUHrjpSqxIyaAJDSUmaTNADqSkzRmgBc0UlFAHOavdi4uiAconA96zi9ErZNNAyaAAtQGNTRw7u1SG1z0FA7EUU21hntWhZ3uHAJqg9uVFRAlTQI6uC7SRtpPNWhXJw3DKwcHkV0djcrcQgg80AWDSU402gABpc0YpMUALmikxRQBxZ5NSJgdqcsW1RnqalVUB56UDFS4VTjFXoJI5BzgVmTbCflqe1gdzxkCkNFyaOMr1rMnjweKnuQ0ZxnpVfexHIzQgZCCRxWnpEzLPtB4NZr9at6UcXqe9Mk6nPFApKXNMQZpM0UUgDNFJRQMwjaM3JNMOnFsDNXmfHFPVxtqTSxQFikf3j09at21xBHwPzqjfNJI21c4qBEkjQ8ZNArly9VZcslUo2Vcq3WprN2LbX71PcWIc7l60LQGrmfMgIyKk0oZv4xnvTngZEOfSm6QpOoR47VSJZ1NJRSZpki0ZpM0UgDNFJRQMx3f5qQ3IHAqGV8cDrUawljuc4FSi7kpuF3Zxk08XCMOcVGGjXgClKxsOOtMRLCqB94q6GBWsobkPHSrUUhIxUspMkmAZTVTRoz/aDnsoNWHbil0Vfmnf1OKcSZGtSUUlWQLRmkpKQC0UlFAzCdfmzSMTipWwab8o61JZAUY0qKRU4ZTS/LSuFhgNKhxSbeaUCkMczZHvWjYW/2eAA/ePJqhCu6ZR71r1cSJC0lFFMkKSijNABRSZooAwS KYXJNPaCU87DUflSD A/lUljg9OD81H5b/3T VGCD0NAXJw3FOXmolRm6KT FTLHJ/cNKw7liyXNwD6DNaNQ6fbMELMMFqtPEw6VaIZHRThE57U7yX9KBEdJU4tz3NL9m/2qBleipjbt7UUASeQnpTDaoewqeloAqm0T0FN wx56CrlFMCBLWNewp4hQdqkooEAAHSiiigYUtFFABRRRQAUUUUANNHaiigQCloopAFFFFMYUUUUALRRRQAUUUUAFFFFAH//2Q=="; 

回答

4

+跡象並不網址後的數據進行編碼,即使你的內容類型說,他們是。

您需要將其替換爲%2B,以便收件人正確地獲取它們。

+1

非常感謝。 +1 :) – Leo

1

爲什麼不把你的UIImage轉換成NSData和你的NSData轉換成base64?

NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 
NSString *base64string = [imageData base64EncodedString]; 

只是實現許多NSData的類別中的一種像這樣的:https://github.com/l4u/NSData-Base64

相關問題