一種簡(jiǎn)單的解決方案,用于檢查Web服務(wù)器上是否存在文件(迅速)
檢查服務(wù)器上是否存在資源需要發(fā)送HTTP請(qǐng)求并接收響應(yīng)。TCP通信可能會(huì)花費(fèi)一些時(shí)間,例如,如果服務(wù)器繁忙,客戶端和服務(wù)器之間的某些路由器無(wú)法正常工作,網(wǎng)絡(luò)斷開(kāi)等。
這就是為什么總是首選異步請(qǐng)求的原因。即使您認(rèn)為請(qǐng)求只需要幾毫秒,由于某些網(wǎng)絡(luò)問(wèn)題,有時(shí)有時(shí)也可能只有幾秒鐘。而且-眾所周知-將 主線程阻塞幾秒鐘是一個(gè)很大的禁忌。
綜上所述,這是一種fileExists()方法的可能實(shí)現(xiàn) 。您已被警告!不要在主線程上使用它!
HTTP請(qǐng)求 方法 設(shè)置為“ HEAD”,以便服務(wù)器僅發(fā)送響應(yīng)頭,而不發(fā)送數(shù)據(jù)。
func fileExists(url : NSURL!) -> Bool { let req = NSMutableuRLRequest(URL: url) req.HTTPMethod = 'HEAD' req.timeoutInterval = 1.0 // Adjust to your needs var response : NSURLResponse? NSURLConnection.sendSynchronousRequest(req, returningResponse: &response, error: nil) return ((response as? NSHTTPURLResponse)?.statusCode ?? -1) == 200}解決方法
關(guān)于此的討論很多,我了解使用委托方法并檢查響應(yīng)“ 404”的解決方案:
var request : NSURLRequest = NSURLRequest(URL: url)var connection : NSURLConnection = NSURLConnection(request: request,delegate: self,startImmediately: false)!connection.start() func connection(didReceiveResponse: NSURLConnection!,didReceiveResponse response: NSURLResponse!) {//...}
但我想有一個(gè)簡(jiǎn)單的解決方案,例如:
var exists:Bool=fileexists(sURL);
因?yàn)榕c委托在同一類(lèi)中會(huì)有很多請(qǐng)求,并且我只想使用函數(shù)fileexists()檢查響應(yīng)。
有什么提示嗎?
更新 我想我必須像下面這樣做一個(gè)同步請(qǐng)求,但是我總是得到0x0000000000000000作為響應(yīng):
let urlPath: String = sURL; var url: NSURL = NSURL(string: urlPath)! var request1: NSURLRequest = NSURLRequest(URL: url) var response: AutoreleasingUnsafeMutablePointer<NSURLResponse? >=nil var error: NSErrorPointer = nil var dataVal: NSData = NSURLConnection.sendSynchronousRequest(request1,returningResponse: response,error:nil)! var err: NSError println(response)
