2016-02-01 19 views
8

私のプロジェクトでは、小さなビデオをダウンロードする必要があります。以前のバージョンでは、私はこれを使用します:AFNetworking 3.0を使用してファイルをダウンロードし、ローカルに保存する方法は?

- (void)downloadFileURL:(NSString *)aUrl savePath:(NSString *)aSavePath fileName:(NSString *)aFileName tag:(NSInteger)aTag; 

AFNetworking 3.0でこれを行うにはどうしたらいいですか?

答えて

12

このコード:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 

NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { 
    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; 
    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; 
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { 
    NSLog(@"File downloaded to: %@", filePath); 
}]; 
[downloadTask resume]; 

は、プロジェクトのREADMEにです:https://github.com/AFNetworking/AFNetworking

3

私は誰のために元の質問がobj-Cであるが、これはGoogle検索で起動し、して実現他にそれにつまずきとし、@Louフランコの答えのスウィフトのバージョンを必要とする、ここにある:ここでのノートの

let configuration = URLSessionConfiguration.default 
let manager = AFURLSessionManager(sessionConfiguration: configuration) 
let url = URL(string: "http://example.com/download.zip")! // TODO: Don't just force unwrap, handle nil case 
let request = URLRequest(url: url) 

let downloadTask = manager.downloadTask(
    with: request, 
    progress: { (progress: Progress) in 
        print("Downloading... progress: \(String(describing: progress))") 
       }, 

    destination: { (targetPath: URL, response: URLResponse) -> URL in 
        // TODO: Don't just force try, add a `catch` block 
        let documentsDirectoryURL = try! FileManager.default.url(for: .documentDirectory, 
                      in: .userDomainMask, 
                      appropriateFor: nil, 
                      create: false) 

        return documentsDirectoryURL.appendingPathComponent(response.suggestedFilename!) // TODO: Don't just force unwrap, handle nil case 
       }, 

    completionHandler: { (response: URLResponse, filePath: URL?, error: Error?) in 
          print("File downloaded to \(String(describing: filePath))") 
         } 
) 

downloadTask.resume() 

カップル:

  • これは私も(ちょうどprint文)progress閉鎖を追加スウィフト3 /スウィフト4
  • です。もちろん元の例のようにnilを渡すことはまったく問題ありません。
  • 3つの場所(TODO:とマークされています)がエラー処理なしで失敗する可能性があります。明らかにクラッシュするのではなく、これらのエラーを処理する必要があります。
+0

ありがとうございました。それは完全に動作します –

+0

多くの人に感謝、素早く素早く働く - 4 –