gpt4 book ai didi

iphone - 错误 - 将图像发送到服务器后出现 "Corrupt JPEG data: 214 extraneous bytes before marker"

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:30:04 25 4
gpt4 key购买 nike

我通过将图像转换为 base64 格式将图像发送到服务器。但问题是在发送图像字符串后,字符“+”被空格“”替换。并显示错误:

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[] = "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];
}

这里是转换成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==";

最佳答案

您的 + 标志未在发布数据中进行 URL 编码,即使您的内容类型表明它们是。

您需要将它们替换为 %2B 以便收件人正确获取它们。

关于iphone - 错误 - 将图像发送到服务器后出现 "Corrupt JPEG data: 214 extraneous bytes before marker",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17854121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com