Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从IOS到php服务的Base64映像_Php_Ios_Service_Web_Escaping - Fatal编程技术网

从IOS到php服务的Base64映像

从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

如果我只在base64中将图像发送到php服务器,由于特殊字符(例如+*/),传输百分比几乎为零。 如果我发送,则成功发送,但服务器上显示的图像没有数据。有人帮我解决这个问题吗

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
    手动执行此操作只会带来潜在问题

  • 不要转义base64字符串
    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];