Krunal
Krunal

Reputation: 6490

Unable to download file to app directory in iPhone

I am new to iPhone,

I am currently developing an iPhone app and would like to implement the ability to download file from the url. I have created the UIWebView, when i click on download link in the webview download will start and i am saving that file to a specified folder in the documents directory. but i am unable to see my downloaded file.

Here is my code snippet,

//CAPTURE USER LINK-CLICK in UIwebView.

 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {

         // Create the request.
            NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:DUrl]
                                                      cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                  timeoutInterval:60.0];

            // create the connection with the request and start loading the data
            NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
            if (theConnection) {
                // Create the NSMutableData to hold the received data.
                receivedData = [[NSMutableData data] retain];
            } else {
                NSLog(@"Inform the user that the connection failed."); 
            }
  return YES; 
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data1
{
    [receivedData appendData:data1];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);

    DirPath=[self MyApplicationDocumentDirectory];
    [receivedData writeToFile:DirPath atomically:YES];

    UIAlertView* Alert = [[UIAlertView alloc] initWithTitle:@"Download Complete !"
                                                         message:nil delegate:nil 
                                               cancelButtonTitle:@"OK"
                                               otherButtonTitles:nil];
    [Alert show];
    [Alert release];


    // release the connection, and the data object
    [connection release];
    [receivedData release];
}

Any help will be appriciated.

EDIT:

            BOOL success =[[NSFileManager defaultManager] fileExistsAtPath:MyDirPath];

            if (success) 
            {
                    UIAlertView* innerAlert = [[UIAlertView alloc] initWithTitle:@"Already downloaded."
                                                                         message:@"Do you want to Downlaod again ?" delegate:self 
                                                               cancelButtonTitle:nil
                                                               otherButtonTitles:@"Yes",@"No",nil];
                    [innerAlert show];
                    [innerAlert release];
            }

where to write this condition ?

Upvotes: 0

Views: 340

Answers (1)

Paresh Navadiya
Paresh Navadiya

Reputation: 38249

EDIT Check whether downloaded file already exits in doc dir before writing(saving) downloaded data like this:

 NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:DirPath error:nil];
 BOOL fileExists = NO;
 for(NSString *fileName in dirContents)
 {
   NSString *filePath = [DirPath stringByAppendingPathComponent:fileName];
   NSData *fileData = [NSData dataWithContentsOfFile:filePath];
    if([receivedData isEqualToData:fileData]) //your receivedData here
    {
        fileExists = YES;
    }
 }
 if(fileExists)
 {
   NSLog(@"File exists");
 }
 else
 {
   NSLog(@"File  does not exists");
  }

U forgot provide fileName for writing data:

DirPath=[self MyApplicationDocumentDirectory];
  NSString *filePath = [DirPath stringByAppendingPathComponent:@"yourFileName"];
[receivedData writeToFile:filePath atomically:YES];

Upvotes: 2

Related Questions