检查 URL 文件是不是存在

Posted

技术标签:

【中文标题】检查 URL 文件是不是存在【英文标题】:Check if URL-file exist or not检查 URL 文件是否存在 【发布时间】:2011-07-28 09:30:39 【问题描述】:

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

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

建议?

【问题讨论】:

Check if file on website exists 和 many more 可能重复。 【参考方案1】:

我花了一段时间才找到我对one of the previous questions on this topic 的回答。引用:

您可以使用NSMutableURLRequest 发送 HTTP HEAD 请求 (有一个方法叫做setHTTPMethod)。你会得到相同的 与 GET 一样的响应标头,但您不必下载整个 资源体。如果要同步获取数据,请使用 sendSynchronousRequest…NSURLConnection的方法。

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

【讨论】:

【参考方案2】:

使用所需的 url 请求创建一个 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。

【讨论】:

【参考方案3】:
NSError *err;
if ([videoURL checkResourceIsReachableAndReturnError:&err] == NO)
   NSLog(@"wops!");

【讨论】:

那个does not seem to be implemented on ios 我的错。您可以尝试连接到 URL 并检查响应代码,如以下问题所述:***.com/questions/1404366/check-if-nsurl-returns-404【参考方案4】:

这是接受答案的代码(为了您的方便):

如何拨打电话

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

【讨论】:

【参考方案5】:

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

查看here 了解如何执行此操作。

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

【讨论】:

以上是关于检查 URL 文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

Android 使用其 URL 检查文件是不是存在于远程服务器中

如何在不下载的情况下使用其 URL 检查文件是不是存在?

如何检查文件是不是存在于laravel的url中

如何使用角度检查来自url的文件是不是存在?

检查txt文件中是不是存在许多URL(Python)[关闭]

.htaccess - 根据 URL slug 检查是不是存在多个文件并相应地重写?