• iOS25 大文件下载 文件输出流


    大文件下载
    
    使用NSURLConnection代理方式实现
    // 接收到响应的时候:创建一个空的文件
    
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response
    {   
     // 获取文件长度
        self.movieCount = [response.allHeaderFields[@"Content-Length"] integerValue];  
       // 创建一个空文件
        [[NSFileManager defaultManager] createFileAtPath:SLQFilePath contents:nil attributes:nil];    
       // 创建文件句柄
        self.handle = [NSFileHandle fileHandleForWritingAtPath:SLQFilePath];
     }
    // 接收到具体数据:马上把数据写入一开始创建好的文件
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {  
      // 移动到文件末尾
        [self.handle seekToEndOfFile];   
     // 写入数据
        [self.handle writeData:data]; 
        self.currentCount += data.length;    
     CGFloat progress = 1.0 * self.currentCount / self.movieCount;   
      self.progressView.progress = progress;   
       NSLog(@"%f",progress * 100 );
    }
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {    self.movieCount = 0;   
        // 关闭文件
        [self.handle closeFile];  
          self.handle = nil;}
    NSOutputStream
    
    文件流,文件输出流,可以输出到内存、硬盘、NSData
    - (void)viewDidLoad {
        [super viewDidLoad];   
     // 建立连接
        NSURL *url  = [NSURL URLWithString:@"http://123.123.123.123/resources/videos/minion_02.mp4"];
        [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url] delegate:self];
    }
     /**
     * 接收到响应的时候:创建一个空的文件
     */
     - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response
    {    
     // 获取服务器那里给出的建议名字   response.suggestedFilename);
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];   
      // 创建文件流
        self.stream = [[NSOutputStream alloc] initToFileAtPath:path append:YES];   
       // 打开文件流
        [self.stream open];
    }
       /**
     * 接收到具体数据:马上把数据写入一开始创建好的文件
     */
       - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {    
       // 参数1要求是bytes
        [self.stream write:[data bytes]  maxLength:data.length];   
        NSLog(@"---");
    }
    
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {   
         // 关闭文件流
        [self.stream close];
    }
  • 相关阅读:
    支付宝接口相关整理
    诡异的 "password取回" 邮件问题
    剑指 offer代码解析——面试题39推断平衡二叉树
    女程序猿做了个梦,各路大神惊现神级评论!
    Mac: Android studio+VirtualBox+Genymotion
    lua 中pairs 和 ipairs差别
    機器學習基石 (Machine Learning Foundations) 作业1 Q15-17的C++实现
    怎样获取HTML5视频的持续时间
    Android之本地相冊图片选取和拍照以及图片剪辑
    19_Android中图片处理原理篇,关于人脸识别站点,图片载入到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写
  • 原文地址:https://www.cnblogs.com/ytmaylover/p/5065867.html
Copyright © 2020-2023  润新知