如何在不下载外部 URL 的情况下测试文件是否存在?

Ron*_*Ron 2 ios

我想在不加载任何实际数据的情况下测试 URL 是否存在。

我正在考虑启动 NSURLConnection,然后使用这两个委托方法来检查状态:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    // Connection failed ... presumably this is a server issue, and I don't know if the URL exists or not.
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    int status = [((NSHTTPURLResponse *)response) statusCode];
    [connection cancel];
    // Do something with the status
}
Run Code Online (Sandbox Code Playgroud)

这是一个明智的方式吗?我正在测试的文件可能非常大,因此我想确保不会下载实际文件。

谢谢,罗恩

ps 我正在考虑添加这个,因为苹果强制我的应用程序停止备份从互联网下载的文件。相反,我将文件存储在非备份空间中,并在备份数据库中跟踪文件的原始位置。由于该文件旨在成为用户库的永久部分,因此我想定期测试文件是否不可访问,然后将其移至备份空间(例如,这样它将在恢复到新设备时幸存下来) 。我对苹果公司强迫我做出这样的改变感到非常恼火,因为我可以想象客户会丢失重要数据。

pps 由于某些奇怪的原因,这些委托方法不再出现在 NSURLConnectionDelegate 协议的文档中。我假设文档只是搞砸了。

小智 5

就我个人而言,我会发送原始请求或修改标头以使用 HEAD(标准 HTTP 标头)。

它与 GET 具有相同的结果类型,因此如果您可以检查结果标头,看看它是 403,404 还是 201,那么就可以了。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

  • 在 iOS 中执行此操作的方法是使用 NSMutableURLRequest 并调用 setHTTPMethod: 到 @"HEAD"。https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableURLRequest_Class/Reference/Reference.html (2认同)