如何使用PHP将图像返回到Objective-C?
我有一个PHP脚本,可以在我的服务器上抓取一个图像。我希望它能够将它发送到Objective-C。我已经尝试了许多方法,我发现这些方法都无法返回图像。我将图像存储在我的服务器上的一个目录中,我希望能够将其发送到我的应用程序。这是我当前的代码: 代码只是没有改变图像。我不知道如何检查PHP是否正确发送图像如何使用PHP将图像返回到Objective-C?,php,ios,objective-c,ubuntu,nsurlconnection,Php,Ios,Objective C,Ubuntu,Nsurlconnection,我有一个PHP脚本,可以在我的服务器上抓取一个图像。我希望它能够将它发送到Objective-C。我已经尝试了许多方法,我发现这些方法都无法返回图像。我将图像存储在我的服务器上的一个目录中,我希望能够将其发送到我的应用程序。这是我当前的代码: 代码只是没有改变图像。我不知道如何检查PHP是否正确发送图像 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSMutableURLRequest *requ
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"myserverurl"]];
[request setHTTPMethod:@"POST"];
NSString *body = @"username=benr783&password=testpassword";
[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connect start];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
self.image.image = [UIImage imageWithData:data];
}
以下是几点观察:
didReceiveData
方法即可收到整个图像。这不是一个有效的假设。(事实上,除非您的图像非常小,否则这实际上是不可能的。)
在开始连接之前,实例化一个NSMutableData
对象,在didReceiveData
中,您只需将收到的数据附加到该NSMutableData
,然后在connectiondFinishLoading
中,一旦您将对didReceiveData
的多个调用中接收到的所有数据组合成一个NSMutableData
,现在就可以获取最终的NSMutableData
并尝试将其转换为UIImage
initWithRequest
的格式副本,并将立即开始
选项设置为否
(仅在特殊情况下使用),则仅调用开始
。在这种情况下,只需删除start
调用即可didReceiveResponse
中,确保nsurResponse
的statusCode
为200。确保未调用didFailWithError
。等等
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
int statusCode = [(NSHTTPURLResponse *)response statusCode];
if (statusCode != 200) {
NSLog(@"statusCode != 200; it is %ld", (long)statusCode);
}
}
}
您是否检查了
direceivedata
中的data
是否真的是图像?PHP是否响应图像内容类型?@Raptor我如何检查?您应该首先了解nsurlconnection的委托,或者简单地使用易于处理的block。如果图像多次下降,我如何一次获得所有内容?您无法控制。你必须假设它会分为几个部分。因此,创建NSMutableData
属性,在开始连接之前将该属性实例化为[NSMutableData]
,让didReceiveData
仅将接收到的数据附加到NSMutableData
中,并仅将其转换为ConnectiondFinishLoading
中的UIImage
,或者,正如chings228所建议的,放弃这种复杂的基于委托的方法,使用类似于sendAsynchronousRequest
的方法,这要简单得多。。。