fileExistsAtPath和checkResourceIsReachableAndReturnError都没有起作用。

3

fileExistsAtPathcheckResourceIsReachableAndReturnError都返回NO,即使文件存在于服务器URL中。

我在(本地)服务器中有一个文件,在http://10.0.0.15/images/hibrise.png中。

  NSURL *url=[NSURL URLWithString:@"http://10.0.0.15/images/hibrise.png"];

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[url path]];
 NSLog(fileExists ? @"Yes" : @"No");

我已经检查了文件权限,一切正常。当我在浏览器中输入相同的URL时,它会显示图像。
'fileExistsAtPath'是用于检查内部文件系统中文件可用性的方法。
'checkResourceIsReachableAndReturnError'也仅适用于内部iOS文件系统。此方法目前仅适用于文件系统资源的URL。对于其他URL类型,将返回NO苹果公司也同样适用于'fileExistsAtPath'。
最好的方法是使用URL来检查文件是否可用。

最好将URL保存到NSCache中,并检查它是否在NScache中找到。因为您无法使用NSFileManager检查文件URL。 - Nitin Gohel
2个回答

0

NSFileManager 是用于 iOS 内部文件系统的。你不能使用 NSFileManager 检查远程文件是否存在。

相反,应该使用 NSURL 类的方法 checkResourceIsReachableAndReturnError 来检查。


3
谢谢回复,但是这仅适用于iOS内部文件系统。"此方法目前只适用于文件系统资源的URL。对于其他类型的URL,会返回NO。" - AlgoCoder

0

使用NSFileManager类无法检查设备以外位置的文件。

你需要使用NSURL方法- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error

NSURL *url=[NSURL URLWithString:@"http://10.0.0.15/images/hibrise.png"];
NSError *err;
BOOL fileExists = [url checkResourceIsReachableAndReturnError:&err];

如果出现错误,它将被传递到NSError指针,因此您还应该检查这个指针。
正确的答案是实际执行HTTP HEAD请求并检查404错误。
BOOL fileExists;
NSURL *url=[NSURL URLWithString:@"http://10.0.0.15/images/hibrise.png"];
    NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30.0f];
    [headRequest setHTTPMethod:@"HEAD"];
    [NSURLConnection sendAsynchronousRequest:headRequest
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               fileExists = ([(NSHTTPURLResponse *)response statusCode]!=404)
                           }];

这对这个问题没有帮助。来自苹果文档的描述:此方法目前仅适用于文件系统资源的URL。对于其他类型的URL,将返回NO。 - Mani
谢谢!更新后的答案正是我所需要的。在我的情况下,当 AWS S3 文件失败时,我得到的是 403 状态码(而不是 404)。我将检查改为 statusCode == 200。 - Devin Pitcher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接