简体   繁体   中英

How to monitor pdf download process in iphone sdk

In my application i need to download pdf file from url.i know how to download pdf file from url and store in local document directory.But i need to show downloading process and i want to know whether download is completed.Please any body give an idea..

Here My code:

 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];

Use ASIHTTPRequest for download file. for below code I had used 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 *strAudioURL=@"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];
}

EDIT

You can used the NSURLSession method to implement such scenario NSURLSession

I'd highly recommend taking a look at ASIHTTPRequest for easy file downloading.

where the numbers of the functionality thru you can able to use the download progress.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM