2010-01-07 7 views
2

Comment vérifier si un fichier existe sur un site Web? J'utilise NSURLConnection avec mon NSURLRequest et un objet NSMutableData pour stocker ce qui revient à la méthode didReceiveData: délégué. Dans la méthode connectionDidFinishingLoading:, puis enregistrez l'objet NSMutableData sur le système de fichiers. Tout bon. Sauf: si le fichier n'existe pas sur le site, mon code s'exécute toujours, obtient des données et enregistre un fichier.Comment vérifier si un fichier existe à une URL particulière?

Comment puis-je vérifier le fichier est là avant que je fasse une demande de téléchargement?

+0

C'est la raison pour laquelle il existe un verbe 'HEAD' de dans HTTP, au lieu de faire une requête 'GET'. – Cyrille

Répondre

3

Mettre en œuvre connection:didReceiveResponse:, qui sera appelée avant connection:didReceiveData:.

La réponse devrait être un objet NSHTTPURLResponse - supposons que vous émettiez une requête HTTP. Vous pouvez donc vérifier [response statusCode] == 404 pour déterminer si le fichier existe ou non. Voir aussi Check if NSURL returns 404.

+0

C'est super merci Kenny. Savez-vous si je peux/dois mettre en œuvre ce qui suit dans mon didReceiveResponse? NSHTTPURLResponse * httpResponse = réponse (NSHTTPURLResponse *); if ([httpResponse statusCode] == 404) // Le fichier n'existe pas { [annulation de connexion]; } –

+0

Désolé aurait dû ajouter, que tout fonctionne un régal. Je me demandais simplement s'il est recommandé d'annuler la connexion comme ça? –

+0

Cela ne fonctionne pas. Il donne un faux positif indiquant incorrectement l'existence d'un fichier lorsqu'il n'y en a pas. – dugla

2

1.File dans votre paquet

NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"]; 
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:path]; 
if (fileExists) { 
NSLog(@"file exists"); 
} 
else 
{ 
NSLog(@"file not exists"); 
} 

2.Taille dans votre répertoire

NSString* path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
path = [path stringByAppendingPathComponent:@"image.png"]; 
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:path]; 
if (fileExists) { 
NSLog(@"file exists"); 
} 
else 
{ 
NSLog(@"file not exists"); 
} 

3.File dans web

NSString *[email protected]"http://eraser2.heidi.ie/wp-content/plugins/all-in-one-seo-pack-pro/images/default-user-image.png"; 
NSURL *url=[NSURL URLWithString:urlString]; 
NSURLRequest *request=[NSURLRequest requestWithURL:url]; 
NSURLConnection *connection=[NSURLConnection connectionWithRequest:request delegate:self]; 
[connection start]; 

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
NSLog(@"%@",response); 
[connection cancel]; 
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
int code = (int)[httpResponse statusCode]; 
if (code == 200) { 
    NSLog(@"File exists"); 
} 
else if(code == 404) 
{ 
    NSLog(@"File not exist"); 
} 
} 
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
NSLog(@"File not exist"); 
} 
Questions connexes