How to find size of a file before downloading it in iOS 7?
Make a request using the HEAD method. For example:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"HEAD"];
This request will be identical to a GET but it won't return the body. Then call
long long size = [response expectedContentLength];
Complete example with NSURLConnection (works for NSURLSession too of course):
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);
This is also useful to conditionally download based on the Last-Modified header (assuming that the server sends you that).
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSString *lastModifiedString = [[response allHeaderFields] objectForKey:@"Last-Modified"];
}
You should instead use the NSURLConnectionDataDelegate
Note: DATADelegate
and its didReceiveResponse:
method to send a HEAD request to get just the header:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
Then you can get the response size with @Port's suggestion:
long long size = [response expectedContentLength];