2011-07-28 503 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