Как проверить, существует ли файл по определенному URL? - PullRequest
2 голосов
/ 07 января 2010

Как проверить, существует ли файл на веб-сайте? Я использую NSURLConnection с моим NSURLRequest и объектом NSMutableData для хранения того, что возвращается в методе делегата didReceiveData:. Затем в методе connectionDidFinishingLoading: я сохраняю объект NSMutableData в файловой системе. Все хорошо. За исключением: если файл не существует на веб-сайте, мой код все еще выполняется, получает данные и сохраняет файл.

Как я могу проверить наличие файла перед тем, как сделать запрос на загрузку?

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Реализация connection:didReceiveResponse:, которая будет вызываться раньше connection:didReceiveData:.

Ответ должен быть объектом NSHTTPURLResponse - предположим, вы отправляете HTTP-запрос. Поэтому вы можете проверить [response statusCode] == 404, чтобы определить, существует файл или нет.

См. Также Проверьте, возвращает ли NSURL 404 .

2 голосов
/ 30 апреля 2015

1.Файл в комплекте

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. Файл в вашем каталоге

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.Файл в сети

NSString *urlString=@"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");
}
...