zoukankan      html  css  js  c++  java
  • 李洪强iOS开发之下载

    //

     

    //

     

    //  LHQDownLoader.m

     

    //  A21 - 李洪强 - 下载

     

    //

     

    //  Created by vic fan on 16/7/3.

     

    //  Copyright © 2016 李洪强. All rights reserved.

     

    //

     

     

     

    #import "LHQDownLoader.h"

     

     

     

    @interface LHQDownLoader ()<NSURLSessionDataDelegate>

     

     

     

    @end

     

     

     

    @implementation LHQDownLoader

     

     

     

    - (void)download: (NSString *)strUrl{

     

     

     

        //构造secssion

     

      //  NSURLSession *secssion = [NSURLSession sharedSession];

     

        

     

        NSURLSessionConfiguration *cfg = [ NSURLSessionConfiguration defaultSessionConfiguration

     

                                          ];

     

        // 1. 得到 session 对象

     

        NSURLSession *session = [NSURLSession sessionWithConfiguration:cfg delegate:self delegateQueue:[NSOperationQueue mainQueue]];

     

        

     

        //2 创建一个下载task

     

        strUrl = [strUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

     

        NSURL *url = [NSURL URLWithString:strUrl];

     

        

     

            NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {

     

               

     

            }];

     

       

     

        //3 开始任务

     

        [task resume];

     

    }

     

     

     

    //注意:

     

    //NSURLSessionDownloadTask下载完成之后,将数据保存在沙盒里面的tmp临时文件中,需要将临时文件 将临时文件剪切或者复制 Caches 文件夹。

     

    #pragma mark - NSURLSessionDownloadDelegate

     

     

     

    /**

     

       下载完成

     

     * @param location  临时文件的路径(下载好的文件)

     

     */

     

     

     

    - ( void )URLSession:( NSURLSession *)session downloadTask:( NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:( NSURL*)location

     

    {

     

        // location : 临时文件的路径(下载好的文件)

     

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

     

       // ];

     

        NSString *url = [NSString stringWithFormat:@"/Users/0426ios/Desktop/test/aabbcc.mp4"];

     

        

     

      

     

       // [filehandle writeData:downloadTask];

     

     

     

        // response.suggestedFilename 建议使用的文件名,一般跟服务器端的文件名一致

     

        NSString *file = [url stringByAppendingPathComponent :downloadTask. response . suggestedFilename

     

        ];

     

        // 将临时文件剪切或者复制 Caches 文件夹

     

        

     

        //判断下载的文件是否存在

     

        NSFileManager *mgr = [ NSFileManager defaultManager];

     

        if(![mgr fileExistsAtPath:url]){

     

            //文件不存在

     

            [mgr createFileAtPath:url contents:nil attributes:nil];

     

            

     

        }else{

     

            //文件存在

     

              NSFileHandle *filehandle = [NSFileHandle fileHandleForUpdatingAtPath:url];

     

            //在文件的末尾追加数据

     

            [filehandle seekToEndOfFile];

     

            

     

            [mgr moveItemAtPath :location. path toPath :file error : nil

     

             ];

     

            

     

            [filehandle closeFile];

     

        }

     

        // AtPath : 剪切前的文件路径

     

        // ToPath : 剪切后的文件路径

     

        

     

    }

     

    /**

     

     恢复下载时调用  

     

     */

     

    - ( void )URLSession:( NSURLSession *)session downloadTask:( NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:( int64_t )fileOffset expectedTotalBytes:( int64_t)expectedTotalBytes

     

    {

     

        

     

    }

     

     

     

    /**

     

        正在下载

     

        @param bytesWritten              这次调用写了多少

     

     *  @param totalBytesWritten         累计写了多少长度到沙盒中了  

     

     *  @param totalBytesExpectedToWrite 文件的总长度

     

     */

     

    - ( void )URLSession:( NSURLSession *)session downloadTask:( NSURLSessionDownloadTask *)downloadTask didWriteData:( int64_t )bytesWritten totalBytesWritten:( int64_t )totalBytesWritten totalBytesExpectedToWrite:( int64_t)totalBytesExpectedToWrite

     

    {

     

        double progress = ( double )totalBytesWritten / totalBytesExpectedToWrite;

     

        NSLog ( @" 下载进度 ---%f", progress);

     

        

     

        

     

        

     

        //判断文件是否存在

     

        

     

    }

     

     

     

    @end

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Oracle手工增加排序区避免SQL使用临时表空间排序产生物理IO
    Oracle中"TABLE ACCESS FULL"的”欺骗时刻“
    Oracle关于12C新特性InMemory踩坑历程
    Oracle19C关于参数sec_case_sensitive_logon控制密码大小写敏感问题
    友链
    RESTful API
    不自由的自由职业
    惊了!修仙=编程??
    [Git专题] 环境搭建
    Linux系统僵尸进程详解
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5638611.html
Copyright © 2011-2022 走看看