2015-12-03 3 views
1

Я пытаюсь отправить изображение с PHP (на стороне сервера) в мое приложение iOS, чтобы я мог отображать его в UIImageView.Преобразование responseObject base64 закодированная строка в UIImage

Мой стороне сервера код:

<?php 

header("Content-Type: image/jpeg"); //if your data is format jpeg 

$username = $_POST['username']; 
$count = $_POST['count']; 
$base64string =  base64_encode(file_get_contents("images/".$username."/".$count."/".$username."file".$count.".jpeg")); 
echo $base64string; 

?> 

Я получаю изображение с помощью этого кода в мое приложение IOS:

NSString * uploadURL = @"http://192.168.1.4/getimage.php"; 

NSLog(@"uploadImageURL: %@", uploadURL); 

NSString *queryStringss = [NSString stringWithFormat:@"%@", uploadURL]; 
       queryStringss = [queryStringss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer=[AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; 
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/plain"]; 
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"image/jpeg"]; 

NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults]; 

NSString *usernameEncoded = [marker.title stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSDictionary *params = @{@"username": usernameEncoded, @"count": [object valueForKey:@"count"]}; 

[manager POST:queryStringss parameters:params success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { 
     NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject); 
     NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:responseObject options:0]; 
     image.image = [UIImage imageWithData:decodedData scale:300/2448]; 
      [self.view addSubview:image]; 
     } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@ ***** %@", operation.responseString, error); 
    }]; 

Когда я запускаю код - она ​​попадает в блок неисправности с ошибкой который читает как base64 закодирован «строка» (изображения), что я посылаю:

2015-12-03 01:19:15.655 sneek[6261:1952572] Error: /9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAYAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAMwKADAAQAAAABAAAJkAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgJkAzAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tr 

... (very long) ... 

Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.} 

что я делаю Inco rrectly?

ответ

1

Вы указали AFJSONResponseSerializer, хотя это не JSON. Конечно, вы переопределили acceptableContentTypes, но это не мешает ему разобрать JSON в ответе.

Я бы использовал AFHTTPResponseSerializer, а затем потерял acceptableContentTypes.

Кстати, я бы не использовал image/jpeg для ответа на base64-кодировку, потому что это текст, а не jpeg. Если вы собираетесь вернуть исходную base64-строку, вы можете использовать application/text или что-то в этом роде.

Или, лучше, измените свой PHP, чтобы на самом деле вернуть JSON (потому что это упростит анализ ответа) и оставайтесь с AFJSONResponseSerializer (но потеряйте acceptableContentTypes после исправления заголовка), а затем вы можете захватить строку base64 от response[@"image"].

<?php 

header("Content-Type: application/json"); 

$username = $_POST['username']; 
$count = $_POST['count']; 
$base64string =  base64_encode(file_get_contents("images/".$username."/".$count."/".$username."file".$count.".jpeg")); 
echo json_encode(array("image" => $base64string)); 

?> 

Или используйте AFImageResponseSerializer и изменить PHP, чтобы вернуть изображение:

<?php 

header("Content-Type: image/jpeg"); //if your data is format jpeg 

$username = $_POST['username']; 
$count = $_POST['count']; 
$contents = file_get_contents("images/".$username."/".$count."/".$username."file".$count.".jpeg")); 
echo $contents; 

?> 
+0

поблагодарить вы пытаетесь ваше второе предложение сейчас ... не был уверен, как реализовать свое первое предложение на IOS стороне. – ewizard

+1

Истинный подход JSON? Затем вы можете захватить строку base64 с помощью 'response [" image "]' и затем декодировать это. – Rob

+0

Я изменил php на то, что вы предложили ... и я собираюсь обновить то, что выглядит мой код iOS прямо сейчас ... Я также получаю новую ошибку, но я думаю, что я еще дальше. Спасибо за вашу помощь! – ewizard

Смежные вопросы