fabian789
fabian789

Reputation: 8412

Implementing 'Download to Computer' functionality of browser

I am trying to download a mp3 file at a given link using NSURLConnection. However, I usually get time-out errors. Entering the link into the browser shows the default player, however the music file is not loaded either:

Downloading mp3's is not illegal in all countries

However, if I create the following simple HTML file:

<html>
    <body>
        <a href="link_to_the_mp3" target="_blank">Download</a>
    </body>
</html>

And then load the file into Safari, right click on the Download link, then select Download to Computer (or whathever it's called in English), Safari downloads the file.

Any ideas on how I can implement this in my own app?


I tried using

NSData *data = [NSData dataWithContentsOfURL:url];

and

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *r, NSData *data, NSError *e) { /.../ }];`

without success.

Upvotes: 2

Views: 247

Answers (2)

Pedro Vieira
Pedro Vieira

Reputation: 3370

Here's an example on what you need to do:

NSURL* url = [NSURL URLWithString:yourMp3URLString];
//URL of the mp3 file

NSString* fileName = [NSString stringWithFormat:@"%@.mp3", mp3Name];
//NSString with the name of the mp3

NSString* destinationPath = [filePathString stringByAppendingPathComponent:fileName];
//NSString with the filePathString (NSString with path destination, you could 
//change it to something like this @"User/Desktop")
//and add the NSString filename to the end of it
//so, if we have like User/Desktop it will become User/Desktop/mp3Name.mp3

NSURLRequest* request = [NSURLRequest requestWithURL:url];
NSURLDownload* download = [[NSURLDownload alloc] initWithRequest:request delegate:self];
[download setDestination:destinationPath allowOverwrite:NO];
//create the URLRequest and Download the mp3 to the destinationPath

Upvotes: 1

Michael Dautermann
Michael Dautermann

Reputation: 89519

Seems like you're trying to hit a fly with a sledgehammer, using "NSURLConnection".

Try doing something a wee bit more high level such as

NSData * mp3data = [[NSData alloc] initWithContentsOfURL:options:error: ];

(the added benefit here is that you can get useful errors back via the "error:" parameter you pass into the method.

Upvotes: 2

Related Questions