检查URL文件是否存在

时间:2011-07-28 09:30:39

标签: iphone xcode url mpmovieplayercontroller

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

我有大约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被验证为文件时,电影再次加载到电影播放器​​中。这意味着加载文件需要两倍的时间。

建议?

5 个答案:

答案 0 :(得分:7)

我花了一些时间来挖掘我对one of the previous questions on this topic的回答。引用:

  

您可以使用NSMutableURLRequest发送HTTP HEAD请求   (有一种名为setHTTPMethod的方法)。你会得到同样的   响应标头与GET一样,但您不必下载整个   资源机构。如果您想同步获取数据,请使用   NSURLConnection的{​​{3}}方法。

通过这种方式,您可以知道该文件是否存在,如果存在则不会全部下载。

答案 1 :(得分:4)

创建一个带有所需网址请求的URLConnecion对象,并将NSURLConnectionDelegate添加到.h文件中,就像我要检查“ yoururl ”是否存在然后您需要做的是

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

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

然后您可以在NSURLConnectionDelegate

的委托函数中跟踪http状态代码
-(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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

以下是接受答案的代码(为方便起见):

如何拨打电话

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

答案 4 :(得分:0)

您可以使用SIZE命令通过FTP服务器检查文件大小来完成此操作。如果文件大小为零,则该文件根本不存在。

检查here如何执行此操作。

您当然也可以使用NSURLRequestNSURLConnection来执行此操作,检查状态是200(成功)还是404(失败)。 404状态不一定是文件不存在,也可能是文件无法检索。