2012-03-01 47 views
0

我想測試一個URL是否存在,而不加載任何實際的數據。如何測試外部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 
} 

這將是一個明智的辦法嗎?我正在測試的文件可能會非常大,所以我想確保實際文件不被下載。

謝謝你,羅恩

附:我正在考慮添加此功能,因爲Apple強制我的應用程序停止備份從互聯網下載的文件。相反,我將文件存儲在未備份的空間中,並在備份的數據庫中跟蹤文件的原始位置。由於該文件旨在成爲用戶庫的永久部分,因此我希望定期測試一個文件是否無法訪問,然後將其移至備份空間(例如,在恢復到新設備時它將繼續存在) 。我非常討厭蘋果公司強迫我做出這一改變,因爲我可以想象客戶會丟失重要數據。

p.p.s.出於某種奇怪的原因,這些委託方法不再出現在NSURLConnectionDelegate協議的文檔中。我假設文檔只是搞砸了。

+0

您可以在聲明中闡述,「蘋果強迫我的應用程序停止備份從互聯網上下載的文件。」我的應用程序爲用戶提供了從iCloud中保存從服務器下載的文件的選項。蘋果是否會無視這種選擇?他們給予拒絕的原因是什麼? – 2012-03-01 23:22:33

+0

我忘了確切的措辭,但蘋果引用了一些新的限制,說只能備份用戶創建的文件。它繼續說可以重新創建的文件不能備份,並且必須具有「不備份屬性」。我的問題是,我的應用程序下載的文件只有在網頁上的文件沒有被刪除而我的應用程序無法控制的情況下才可以恢復。我不確定發送到iCloud的文件是什麼......我的應用程序只是將文件存儲在我的沙盒中,而不是Library/Caches。 – Ron 2012-03-01 23:38:13

+0

繼續我的上一條評論 - 我反對駁回,並接到了蘋果開發部門的電話。他們告訴我他們明白我的文件無法恢復,但他們仍然決定拒絕我的應用程序。他們甚至建議我使用Dropbox等第三方雲解決方案來存儲Apple不允許我備份的關鍵文件。我正在考慮如何將這個話語傳達給我的應用程序的用戶:「Apple只會允許這個應用程序備份你的一些重要文件,如果你想備份所有這些文件,請點擊此鏈接設置建立一個Dropbox帳戶。「 – Ron 2012-03-01 23:41:47

回答

3

就我個人而言,我會發送一個原始請求或修改頭使用頭是一個標準的HTTP頭。

它與GET具有相同的結果類型,所以如果你可以檢查結果標題,看看它的403,404或201,那麼你是好的。

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

+1

在iOS中這樣做的方法是使用NSMutableURLRequest並調用setHTTPMethod:to @「HEAD」。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableURLRequest_Class/Reference/Reference.html – jsd 2012-03-01 23:22:27

+0

感謝您的建議......這聽起來像是一種更好的方式! – Ron 2012-03-01 23:38:49

相關問題