2013-10-11 57 views
4

誠徵的iOS 7下載前找到一些服務器上的文件的大小...我有NSURLConnectionDelegate的方法,但它的iOS 4.3如何在iOS 7中下載文件之前查找文件的大小?

這裏後棄用了這種方法:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
+0

入住這斯威夫特4解決方法:https://開頭stackoverflow.com/a/48584914/3161503 – fethica

回答

2

您應改用NSURLConnectionDataDelegate:DATADelegate

及其didReceiveResponse:方法發送HEAD request得到公正頭:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 

然後你就可以得到響應大小與@ Port的建議:

long long size = [response expectedContentLength]; 
+0

非常感謝,非常有幫助! :) NSURLCONNECTIONDELEGATE有許多方法已棄用,現在這些方法呈現在NSURLCONNECTIONDATADELEGATE! – asadullah07

1

您可以使用此方法,它是通過下面的委託方法NSURLResponse對象:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 

} 
-(NSURLRequest *)connection:(NSURLConnection *)connection 
     willSendRequest:(NSURLRequest *)request 
     redirectResponse:(NSURLResponse *)response { 
} 

嘗試這樣的..

long long size = [response expectedContentLength]; 
+0

@ user1918014你解決了你的問題 – Sport

+0

它也被棄用。 – asadullah07

+0

- 連接:needNewBodyStream - 連接:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:通過的iOS 4.3 所需的方法可用在IOS 3.0 - 連接:didReceiveData:通過的iOS 4.3 所需的方法可用在IOS 2.0 - 連接:didReceiveResponse:可用在IOS要求的方法2.0到iOS 4.3 - 連接:willCacheResponse:必需的方法在iOS 2.0到iOS 4.3中可用 - 連接:willSendRequest:redirectResponse:所需的方法在iOS 2.0到iOS 4.3中可用012rd- connectionDidFinishLoading:必需的方法iOS 2.0中可用的iOS 4.3 – asadullah07

0

試試這個會有幫助。 。 。 。 。

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse 
                     *)response 
{ 
    NSHTTPURLResponse * pHttpUrlResponse = (NSHTTPURLResponse *) response; 

    if ([response respondsToSelector:@selector(allHeaderFields)]) 
    { 
     NSString * fileLength = [NSString stringWithFormat:@"%lld",[pHttpUrlResponse expectedContentLength]]; 
    }  
} 

編碼快樂:)

+0

這是我在我的問題中列出的不贊成使用的方法。 – asadullah07

-1

試試這個,

NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError]; 
NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize]; 
long long fileSize = [fileSizeNumber longLongValue]; 

:)

+0

這是用於已下載的文件,不適用於網絡上的文件。 – asadullah07

+0

好的...爲此,我認爲你必須使用ftp。 –

11

請使用HEAD方法的請求。例如:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
[request setHTTPMethod:@"HEAD"]; 

該請求將與GET相同,但不返回正文。然後調用

long long size = [response expectedContentLength]; 

與NSURLConnection的完整示例(適用於NSURLSession過的課程):

NSURL *URL = [NSURL URLWithString:@"http://www.google.com"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 
[request setHTTPMethod:@"HEAD"]; 
NSHTTPURLResponse *response; 
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error: nil]; 
long long size = [response expectedContentLength]; 
NSLog(@"%lld",size); 

這也是基於Last-Modified頭有條件地下載有用的(假設服務器發送你那)。

if ([response respondsToSelector:@selector(allHeaderFields)]) { 
    NSString *lastModifiedString = [[response allHeaderFields] objectForKey:@"Last-Modified"]; 
} 
1

對於斯威夫特使用這些步驟,

步驟1:使用NSURLConnectionDataDelegate

class ViewController: UIViewController,NSURLConnectionDataDelegate { 

步驟2:創建用於連接請求

var request:NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "http://www.twitter.com")!) 

// Use **HEAD** request to get http header information. 

request.HTTPMethod = "HEAD" 

第3步:創建連接。

var connection:NSURLConnection = NSURLConnection(request: request, delegate: self)! 

第4步:使用委託方法 NSURLConnectionDataDelegate

func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) 
{ 
    var size = response.expectedContentLength 
    println("size : \(size)") 
} 

下面是完整的代碼...

import UIKit 

class ViewController: UIViewController,NSURLConnectionDataDelegate { 

override func viewDidLoad() { 
    super.viewDidLoad() 


    var request:NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "http://www.twitter.com")!) 
    request.HTTPMethod = "HEAD" 

    var connection:NSURLConnection = NSURLConnection(request: request, delegate: self)! 

} 

func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) 
{ 
    var size = response.expectedContentLength 
    println("size : \(size)") 
} 
} 
+0

是以字節爲單位的大小? –

+0

@RayKing,'所以你可以在大多數現代平臺上採用字節單位,其中一個字節長度爲8位。見這裏:http://stackoverflow.com/a/31389001/3411787 –

相關問題