2010-04-01 118 views
1

我想要做的事情解释如下。下载前计算文件大小

我有一个MP3文件的网址。 (例如Sound File

当用户启动应用程序,下载应该开始&的,我已经实现了以下方法:

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    NSURL *url=[NSURL URLWithString:@"http://xyz.pqr.com/abc.mp3"]; 
    NSURLRequest *req=[NSURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:120]; 

    NSURLConnection *con=[[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES]; 

    if(con){ 
     myWebData=[[NSMutableData data] retain]; 
     } else { 
     //   [MainHandler performSelector:@selector(targetSelector:) withObject:nil]; 
     } 
    } 


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

    NSLog(@"%@",@"connection established"); 
    [myWebData setLength: 0]; 

} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    NSLog(@"%@",@"connection receiving data"); 
    [myWebData appendData:data]; 
} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"%@",@"connection failed"); 
    [connection release]; 
    // [AlertViewHandler showAlertWithErrorMessage:@"Sorry, there is no network connection. Please check your network and try again."]; 
// [self parserDidEndDocument:nil]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    [connection release]; 
} 

以上方法工作完美下载。但我无法获得将要下载的确切大小。我想知道什么是文件的大小 - 将要下载。

回答

7

只需使用expectedContentSize被传递到下面的委托方法的NSURLResponse对象:

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

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

这样的:

long long size = [response expectedContentLength]; 
+1

这是个很好的办法,谢谢 – RVN 2010-10-13 17:21:26

0

是的!几乎完成与ASIHTTP。

-(IBAction)btnTapped:(id)sender { 
    NSURL *url = [NSURL URLWithString:@"http://sound20.mp3pk.com/indian/omkara/omkara1%28songs.pk%29.mp3"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDownloadDestinationPath:[self pathForLogInCCID]]; 
    [myProgressIndicator setProgress:0]; 

    [request setDownloadProgressDelegate:myProgressIndicator]; 
    [request startSynchronous]; 
[myProgressIndicator doubleValue]); 

    [request setDelegate:self]; 
    [request startAsynchronous]; 
} 


- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    // Use when fetching text data 
// NSString *responseString = [request responseString]; 

    // Use when fetching binary data 
// NSData *responseData = [request responseData]; 
} 

- (void)requestFailed:(ASIHTTPRequest *)request 
{ 
// NSError *error = [request error]; 
} 

-(NSString*)pathForLogInCCID{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *DataPath = [documentsDirectory stringByAppendingPathComponent:@"mySong.png"]; 
    return DataPath; 
}