如何从互联网上下载文件,并保存在iPhone上的“文件”?(How to download file

2019-08-02 13:58发布

我有一个在它有几个.png文件我的远程服务器上的文件夹。 我想从我的应用程序中下载这些,并把它们存储在应用的“文档”文件夹。 我怎样才能做到这一点?

Answer 1:

最简单的方法是使用的NSData的便捷方法initWithContentOfURL:writeToFile:atomically:获取数据和写出来,分别。 请记住,这是同步的,将阻止你执行它,直到读取和写入任何线程完成。

例如:

// Create and escape the URL for the fetch
NSString *URLString = @"http://example.com/example.png";
NSURL *URL = [NSURL URLWithString:
              [URLString stringByAddingPercentEscapesUsingEncoding:
                          NSASCIIStringEncoding]];

// Do the fetch - blocks!
NSData *imageData = [NSData dataWithContentsOfURL:URL];
if(imageData == nil) {
    // Error - handle appropriately
}

// Do the write
NSString *filePath = [[self documentsDirectory] 
                      stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];

documentsDirectory方法是从无耻被盗了这个问题 :

- (NSString *)documentsDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    return [paths objectAtIndex:0];
}

但是,除非你打算线程它自己这个会停止,而文件的下载用户界面活动。 有时,您可能想看看NSURLConnection的及其委托 - 它在后台下载并通知有关异步下载数据的委托,所以你可以建立NSMutableData的实例,然后只是把它写出来的时候,连接的完成。 你代表可能包含如下方法:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // Append the data to some preexisting @property NSMutableData *dataAccumulator;
    [self.dataAccumulator appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // Do the write
    NSString *filePath = [[self documentsDirectory] 
                          stringByAppendingPathComponent:@"image.png"];
    [imageData writeToFile:filePath atomically:YES];
}

这个小细节,比如宣布dataAccumulator和处理错误,都留给读者:)

重要的文件:

  • 的NSData
  • NSURLConnection的


文章来源: How to download files from internet and save in 'Documents' on iPhone?