2011-07-28 302 views
2

我想知道如何检查服务器上是否存在文件,而不是先下载数据。检查URL文件是否存在

我有大约30个不同的对象,其中一些连接到服务器上的电影。目前我使用NSData来控制URL是否存在,然后显示电影,或者如果不存在,然后提醒用户该对象没有视频。我使用的代码为:

NSString *fPath = [[NSString alloc] initWithFormat:@"http://www.myserver/%@", [rows idNr]]; 
NSURL *videoURL = [NSURL URLWithString:fPath]; 
NSData *videoData = [NSData dataWithContentsOfURL:videoURL]; 

url = [NSURL URLWithString:fPath]; 
[fPath release]; 

if (videoData) { 
    [self performSelectorOnMainThread:@selector(playVideo:) withObject:url waitUntilDone:NO]; 
} else { 
    NSLog(@"videodata false"); 
    errorLabel.hidden = NO; 
    activityView.hidden = YES; 
} 

“rows idNr”是对象的名称。这种方法正在做我想做的事情,但问题是,使用NSData它首先“下载”文件,并且当URL被验证为文件时,电影再次在电影播放器​​中加载。这意味着加载文件需要两倍的时间。

对此提出建议?

+0

的可能的复制[检查网站上的文件存在(HTTP://计算器。com/questions/3086213/check-if-file-on-website-exists)和[更多](http://stackoverflow.com/search?q=http+url+exists+iphone)。 – zoul

回答

1
NSError *err; 
if ([videoURL checkResourceIsReachableAndReturnError:&err] == NO) 
    NSLog(@"wops!"); 
+0

这[似乎并没有在iOS上实现](http://stackoverflow.com/questions/3791067)。 – zoul

+0

我的不好。您可以尝试连接到该URL并检查响应代码,如此问题中所述:http://stackoverflow.com/questions/1404366/check-if-nsurl-returns-404 – andreamazz

0

您可以通过使用SIZE命令通过FTP服务器检查文件的大小来做到这一点。如果文件大小为零,则该文件根本不存在。

检查here如何做到这一点。

您当然也可以通过使用NSURLRequestNSURLConnection来检查状态是否为200(成功)或404(失败)。 404状态不一定是该文件不存在,但也可能是该文件无法检索。

7

我花了一段时间挖掘我的回答one of the previous questions on this topic。报价:

可以使用NSMutableURLRequest发送一个HTTP HEAD请求 (有一个名为setHTTPMethod方法)。您将获得与GET相同的 响应标头,但您不必下载整个 资源正文。如果您想同步获取数据,请使用NSURLConnectionsendSynchronousRequest…方法。

这样您就会知道文件是否存在,如果存在则不会将其全部下载。

4

做一个URLConnecion对象与所需的URL请求,并添加NSURLConnectionDelegate到.h文件中像我想查“yoururl”是存在或者没有,那么你需要做的是

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString: @"http://www.google.com"]]; 

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; 

,然后你可以跟踪的HTTP状态代码在NSURLConnectionDelegate

-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    int code = [(NSHTTPURLResponse *)response statusCode]; 
    if (code == 404) 
    { 
     // website not found 
     // do your stuff according to your need 
    } 
} 

委托功能您还可以找到各种状态代码here

1

这里有一个公认的答案代码(为方便起见):

如何使呼叫

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]]; 
     [request setHTTPMethod:@"HEAD"]; 
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
+1

这应该是对接受的编辑回答。 – NobodyNada