2015-12-03 98 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

即使它不是JSON,也已指定AFJSONResponseSerializer。当然,你已经重写了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方法?然后你可以用'response [“image”]''获取base64字符串,然后对其进行解码。 – Rob

+0

我改变了PHP到你的建议......我将更新我的iOS代码现在看起来像...我也得到一个新的错误,但我认为我现在进一步。谢谢你的帮助! – ewizard

相关问题