2012-08-24 27 views
0

在我的应用程序中,我需要从url.i下载pdf文件知道如何从网址下载pdf文件并存储在本地文档目录中。但是我需要显示下载过程,并且我想要要知道下载是否completed.Please任何机构给出一个想法..如何监控iphone中的pdf下载过程sdk

这里我的代码:

NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.msy.com.au/Parts/PARTS.pdf"]]; 

//Store the Data locally as PDF File 

NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]]; 

NSString *filePath = [resourceDocPath stringByAppendingPathComponent:@"myPDF.pdf"]; 

[pdfData writeToFile:filePath atomically:YES]; 

回答

3

使用ASIHTTPRequest下载文件。下面的代码我用了ASIHTTPRequest

float currentProgress; 
UILabel *dwnLbl; 
UIProgressView * myProgressIndicator; 
UIProgressView *progressBar; 
@property (nonatomic, retain) ASIHTTPRequest *rqstForAudio; 


-(void)viewDidLoad{ 
    self.av=[[UIAlertView alloc] initWithTitle:@"Downloading.." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil]; 
    [self.actV setFrame:CGRectMake(125, 60, 37, 37)]; 

    dwnLbl = [[UILabel alloc] initWithFrame:CGRectMake(45, 30, 200, 37)]; 
    dwnLbl.textAlignment = UITextAlignmentCenter; 
    dwnLbl.font = [UIFont boldSystemFontOfSize:20]; 
    dwnLbl.backgroundColor = [UIColor clearColor]; 
    dwnLbl.textColor = [UIColor whiteColor]; 

    progressBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar]; 
    [progressBar setFrame:CGRectMake(45, 65, 200, 20)]; 
    progressBar.progress = 0; 
    [self.av addSubview:dwnLbl]; 
    [self.av addSubview:progressBar]; 
} 
-(void)downLoadBook{ 
    NSString *[email protected]"http://www.msy.com.au/Parts/PARTS.pdf" 
    // check first locally exists or not 
    NSString *strPathToAudioCache=[NSString stringWithFormat:@"%@/%@", 
            [(NSArray*)NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0], 
            AudioFolder]; 

    NSDictionary *dOfAudios=[NSDictionary dictionaryWithContentsOfFile:strPathToAudioCache]; 
    if([dOfAudios valueForKey:strAudioURL]) { 
    } else { 
     self.av.title = @"Downloading.."; 
     [self.av show]; 
     NSString *pdf = @"bookTitle.pdf"; 


     NSURL *audioURL = [NSURL URLWithString:strAudioURL]; 
     NSString *strPathToDownload=[NSString stringWithFormat:@"%@/%@",[(NSArray*)NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0],pdf]; 
     [self.rqstForAudio setDownloadProgressDelegate:myProgressIndicator]; 

     if(!self.rqstForAudio || [self.rqstForAudio isFinished]) { 
      self.rqstForAudio=[ASIHTTPRequest requestWithURL:audioURL]; 
      [self.rqstForAudio setDelegate:self]; 
      [self.rqstForAudio setDownloadProgressDelegate:self]; 
      [self.rqstForAudio setAllowResumeForFileDownloads:YES]; 
      [self.rqstForAudio setCachePolicy:ASIUseDefaultCachePolicy]; 
      [self.rqstForAudio setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 
      [self.rqstForAudio setDidFailSelector:@selector(failedToLoad:)]; 
      [self.rqstForAudio setDidFinishSelector:@selector(finishedLoading:)]; 
      [self.rqstForAudio setDownloadCache:[ASIDownloadCache sharedCache]]; 
      [self.rqstForAudio setDownloadDestinationPath:strPathToDownload]; 
      [self.rqstForAudio startAsynchronous]; 
     } 
    } 
} 



- (void)failedToLoad:(ASIHTTPRequest*)request { 
    [self.av dismissWithClickedButtonIndex:0 animated:YES]; 
    NSLog(@"failed to download"); 
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"MESSAGE" message:@"Failed to Download" delegate:self cancelButtonTitle:RETRY otherButtonTitles:nil, nil]; 
    av.delegate = self; 
    [av show]; 
} 

- (void)finishedLoading:(ASIHTTPRequest*)request { 
    NSLog(@"finished loading"); 
    NSString *strPathToAudioCache=[NSString stringWithFormat:@"%@", 
           [(NSArray*)NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]; 

NSMutableDictionary *dOfAudios=[NSMutableDictionary dictionaryWithContentsOfFile:strPathToAudioCache]; 

if([dOfAudios allKeys].count>0) { 
    [dOfAudios setValue:[request downloadDestinationPath] forKey:[[request url] description]]; 
} else { 
    dOfAudios=[NSMutableDictionary dictionary]; 
    [dOfAudios setValue:[request downloadDestinationPath] forKey:[[request url] description]]; 
} 
    [self.av dismissWithClickedButtonIndex:0 animated:YES]; 
    [dOfAudios writeToFile:strPathToAudioCache atomically:YES]; 
} 

- (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes{ 
    [self setProgress:[myProgressIndicator progress]]; 
} 
- (void)setProgress:(float)progress 
{ 
    currentProgress = progress; 
    if (!progress == 0.0) { 
    } 
    if(currentProgress*100 == 100.00){ 
     self.av.title = @"Finishing.."; 
    } 
    progressBar.progress = currentProgress; 
    dwnLbl.text = [NSString stringWithFormat:@"%.2f%%",currentProgress*100]; 
} 

编辑

您可以使用NSURLSession方法来实现这样的场景 NSURLSession

+0

由于其工作 – banu

+0

myProgressIndicator显示错误“使用未声明的标识符‘myProgressIndicator’的” – banu

+0

只是在头文件中定义为UIProgressBar * myProgressIndicator – Hiren

1

我会强烈建议在ASIHTTPRequest,便于文件下载考虑看看。

通过您可以使用下载进度的功能数量。

+0

感谢萨穆埃尔我将把ASIHTTPRequest。 – banu