user3715851
user3715851

Reputation: 21

How to download a file from the webview in os x and save it to a specific location

I have looked everywhere and have not found exactly what I am looking for, so here is my question:

I have a basic app I am playing around with. I have created a webview and would like to be able to download a file from the website that loads in the webview and save the file to say the Downloads folder on the local machine. The site loads fine inside the webview, now how do I download a file, say an .xml file from the site and save it to the Downloads folder on the local machine?

This is what I have so far:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];//<-- example site
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [[webView mainFrame] loadRequest:request];



}

I would like to be able to download a file (possible using a delegate) then save it to a location on the local computer. I am pretty new to this so I'd appreciate any help.

Upvotes: 0

Views: 3314

Answers (1)

user3715851
user3715851

Reputation: 21

The issue has been resolved. I added the following code to make it work:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; // <-- example website
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    self.webView.policyDelegate = self;
    [self.webView setDownloadDelegate:self];
    [[self.webView mainFrame] loadRequest:request];

}

- (void)webView:(WebView *)webView decidePolicyForMIMEType:(NSString *)type
                                                    request:(NSURLRequest *)request
                                                    frame:(WebFrame *)frame
                                            decisionListener:(id < WebPolicyDecisionListener >)listener
{
    if([type isEqualToString:@"application/octet-stream"]) //this is the type I was looking for
    {
        //figure out how to save file here

        [listener download];
        NSURLDownload *downLoad = [[NSURLDownload alloc] initWithRequest:request delegate:self];

        if(downLoad)
        {
            [self download:downLoad decideDestinationWithSuggestedFilename:@"filename.ext"];
            NSLog(@"File Downloaded Succesfully");
            //[webView close];
            [self.window close];

        }
        else
        {
            NSLog(@"The download failed");
        }



    }
    //just ignore all other types; the default behaviour will be used
}

-(void)download:(NSURLDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename
{
    NSString *destinationFileName;
    NSString *homeDirectory = NSHomeDirectory();

    destinationFileName = [[homeDirectory stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:filename];
    [download setDestination:destinationFileName allowOverwrite:NO]; //file is being saved to the Documents folder on the local machine
}

Hope this will be helpful to someone else.

Upvotes: 2

Related Questions