iOS開發中利用AFNetworking下載大檔案以及下載檔案的刪除

樑森森發表於2017-07-04

在iOS開發的某些專案中有下載的功能,如視訊的下載,本篇部落格說的是利用AFNetworking進行下載。程式碼是我從網上找的,但網上的程式碼有一個問題,它將下載的視訊存放到了沙盒的Document檔案下,這樣是不對的。Document檔案不能存放大的檔案和下載的東西,我們需要將下載的大檔案存放到沙盒下的Library檔案下的Caches檔案下。直接上程式碼:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

    // 1. 建立會話管理者

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

    

    // 2. 建立下載路徑和請求物件

    NSURL *URL = [NSURL URLWithString:@"http://dldir1.qq.com/qqfile/QQforMac/QQ_V5.4.0.dmg"];

    NSURLRequest *request = [NSURLRequest requestWithURL:URL];

    

    // 3.建立下載任務

    /**

     * 第一個引數 - request:請求物件

     * 第二個引數 - progress:下載進度block

     *      其中: downloadProgress.completedUnitCount:已經完成的大小

     *            downloadProgress.totalUnitCount:檔案的總大小

     * 第三個引數 - destination:自動完成檔案剪下操作

     *      其中: 返回值:該檔案應該被剪下到哪裡

     *            targetPath:臨時路徑 tmp NSURL

     *            response:響應頭

     * 第四個引數 - completionHandler:下載完成回撥

     *      其中: filePath:真實路徑 == 第三個引數的返回值

     *            error:錯誤資訊

     */

    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress *downloadProgress) {

        

        __weak typeof(self) weakSelf = self;

        // 獲取主執行緒,不然無法正確顯示進度。

        NSOperationQueue* mainQueue = [NSOperationQueue mainQueue];

        [mainQueue addOperationWithBlock:^{

            // 下載進度

            weakSelf.progressView.progress = 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount;

            weakSelf.progressLabel.text = [NSString stringWithFormat:@"當前下載進度:%.2f%%",100.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount];

        }];

        

        

    } destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {

        // 檔案下載路徑   我們下載的大檔案如視訊應該放在沙盒的Library檔案下

         NSString * caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

        NSString * filePathStr = [caches stringByAppendingString:@"/vv.dmg"];

        NSURL * filePath = [NSURL URLWithString:filePathStr];

        NSFileManager * fileManager = [NSFileManager defaultManager];

        // 建立一個空的檔案

        [fileManager createFileAtPath:filePathStr contents:nil attributes:nil];

//        NSURL *path = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];

//        NSURL * filePath = [path URLByAppendingPathComponent:@"QQ_V5.4.0.dmg"];

        return filePath;

        

    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {

        

        NSLog(@"File downloaded to: %@", filePath);

        NSString * fileStr = filePath.absoluteString;

        NSLog(@"%@", fileStr);

        _filePath = fileStr;

    }];


    // 4. 開啟下載任務

    [downloadTask resume];


專案中有下載功能必然也有刪除下載檔案的功能,刪除就比較簡單了,我們只需利用NSFileManager這個類就可以實現刪除下載的檔案的功能。程式碼:

 NSFileManager * fileManager = [NSFileManager defaultManager];

    // 刪除檔案

    [fileManager removeItemAtPath:_filePath error:nil];


我們只要獲取刪除檔案的路徑即可。

本篇部落格到此結束,謝謝檢視!!!





相關文章