检查 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 了解如何执行此操作。
您当然也可以通过使用NSURLRequest
和NSURLConnection
来执行此操作,检查状态是200(成功)还是404(失败)。 404状态不一定是文件不存在,也可能是文件无法检索。
【讨论】:
以上是关于检查 URL 文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章
Android 使用其 URL 检查文件是不是存在于远程服务器中