从IOS到php服务的Base64映像
如果我只在base64中将图像发送到php服务器,由于特殊字符(例如+*/),传输百分比几乎为零。 如果我发送,则成功发送,但服务器上显示的图像没有数据。有人帮我解决这个问题吗从IOS到php服务的Base64映像,php,ios,service,web,escaping,Php,Ios,Service,Web,Escaping,如果我只在base64中将图像发送到php服务器,由于特殊字符(例如+*/),传输百分比几乎为零。 如果我发送,则成功发送,但服务器上显示的图像没有数据。有人帮我解决这个问题吗 string = [imageData base64EncodedStringWithOptions:kNilOptions]; // iOS 7+ NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPer
string = [imageData base64EncodedStringWithOptions:kNilOptions]; // iOS 7+
NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)string,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\" "),
kCFStringEncodingUTF8));
NSString*urlString2=[NSString stringWithFormat:@“mylink.com/xyz”]
作为问题的解决方案,请尝试在php脚本中使用urldecode()对base64编码的图像数据进行解码 然后使用file\u put\u contents()将图像数据写入文件 另外,请尝试执行示例代码段 例如
以下是几点观察:
NSJSONSerialization
来构建JSON。使用stringWithFormat
手动执行此操作只会带来潜在问题NSJSONSerialization
将自动确保JSON格式正确内容类型
标题以反映请求主体的详细信息如果这个答案解决了问题,那么OP显然使用的是一个根本不需要百分比转义的请求。手动百分比转义字符串而在另一端手动取消转义是愚蠢的。我更新了代码。你能帮助我吗?谢谢,谢谢!你救了我一天!非常感谢。问题解决了!!!完美的这个变量是要忘记的。
NSString *jsonString2= [NSString stringWithFormat: @"{\"id_sala\":\"%@\",\"base\":\"%@\",\"tipo\":\"IOS\"}",iddsala,encodedString];
NSLog(@"%@",encodedString);
NSData* responseData2 = nil;
NSURL *url2=[NSURL URLWithString:[urlString2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
responseData2 = [NSMutableData data] ;
NSMutableURLRequest *request2=[NSMutableURLRequest requestWithURL:url2];
NSString *bodydata2=[NSString stringWithFormat:@"%@",jsonString2];
[request2 setHTTPMethod:@"POST"];
NSData *req2=[NSData dataWithBytes:[bodydata2 UTF8String] length:[bodydata2 length]];
[request2 setHTTPBody:req2];
NSURLResponse* response2;
NSError* error2 = nil;
responseData2 = [NSURLConnection sendSynchronousRequest:request2 returningResponse:&response2 error:&error2];
responseString2 = [[NSString alloc] initWithData:responseData2 encoding:NSUTF8StringEncoding];
$img_data=urldecode(base64_decode($img_data));
file_put_contents($filename,$img_data);
NSURL *url = [NSURL URLWithString:@"http://mylink.com/xyz"]; // don't forget http; also all of those `stringWithFormat` references building urlString2 was entirely unnecessary
NSString *base64String = [imageData base64EncodedStringWithOptions:kNilOptions]; // iOS 7+
NSDictionary *dictionary = @{@"id_sala" : iddsala,
@"base" : base64String,
@"tipo" : @"IOS"};
NSError *error;
NSData *httpBody = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];
NSAssert(httpBody, @"dataWithJSONObject error: %@", error);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:httpBody];
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!data || error) {
NSLog(@"sendAsynchronousRequest error: %@", error);
return;
}
// use the `data` result here; e.g. if JSON response
NSError *parseError;
id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
if (responseObject) {
NSLog(@"responseObject = %@", responseObject);
} else {
// some problem parsing JSON; it's often useful to keep at the body of the response to diagnose problem
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"responseString = %@", responseString);
}
}];
[task resume];