断点续传

转载 2016年05月31日 13:14:48
//
//  ViewController.m
//  断点续传
//
//  Created by apple on 16/5/31.
//  Copyright © 2016年 李重阳. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<NSURLSessionDelegate>

@property (weak, nonatomic) IBOutlet UIProgressView *progressView;

/* 下载文件的工具 **/
@property (nonatomic, strong) NSURLSessionDownloadTask *task;
@property (nonatomic, strong) NSData *resumeData;
@property (nonatomic, strong) NSURLSession *session;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


#pragma mark - set/get 方法
- (NSURLSession *)session {

    if (_session == nil) {

        NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];
        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    }
    return _session;

}



/*开始下载的方法**/
- (IBAction)downLoad:(id)sender {

    // 1.创建一个下载任务
    NSURL *url = [NSURL URLWithString:@"http://weixue.steptowin.com:8000/data/img/20160411/veuyytthy4b2_320_200.jpg"];
    self.task = [self.session downloadTaskWithURL:url];

    // 2.开始任务
    [self.task resume];

}
/*暂停的点击方法 **/
- (IBAction)pause:(id)sender {

    __weak typeof(self) vc = self;
    [self.task cancelByProducingResumeData:^(NSData *resumeData) {
        //  resumeData : 包含了继续下载的开始位置\下载的url
        vc.resumeData = resumeData;
        vc.task = nil;
    }];

}
/* 恢复的点击方法 **/
- (IBAction)resume:(id)sender {
    // 传入上次暂停下载返回的数据,就可以恢复下载
    self.task = [self.session downloadTaskWithResumeData:self.resumeData];

    // 开始任务
    [self.task resume];

    // 清空
    self.resumeData = nil;

}

#pragma mark - NSURLSessionDownloadDelegate

/*下载完成的回调**/
- (void)URLSession:(NSURLSession *)session
      downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location {

    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    // response.suggestedFilename : 建议使用的文件名,一般跟服务器端的文件名一致
    NSString *file = [caches stringByAppendingPathComponent:downloadTask.response.suggestedFilename];

    // 将临时文件剪切或者复制Caches文件夹
    NSFileManager *mgr = [NSFileManager defaultManager];

    // AtPath : 剪切前的文件路径
    // ToPath : 剪切后的文件路径
    [mgr moveItemAtPath:location.path toPath:file error:nil];
}

/* 下载进度的回调 **/
- (void)URLSession:(NSURLSession *)session
      downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {

    NSLog(@"获得下载进度--%@", [NSThread currentThread]);
    // 获得下载进度
    self.progressView.progress = (double)totalBytesWritten / totalBytesExpectedToWrite;
}

/* 恢复下载的回调,从哪里开始下载**/
- (void)URLSession:(NSURLSession *)session
      downloadTask:(NSURLSessionDownloadTask *)downloadTask
 didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes {

    NSLog(@"fileOffset = %lld",fileOffset);

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

【大话QT之十】实现FTP断点续传

应用需求:         网盘开发工作逐步进入各部分的整合阶段,当用户在客户端修改或新增加一个文件时,该文件要同步上传到服务器端对应的用户目录下,因此针对数据传输(即:上传、下载)这一块现在既定了...
  • houqingdong2012
  • houqingdong2012
  • 2014年06月17日 23:25
  • 4936

C# 断点续传原理与实现

在了解HTTP断点续传的原理之前,让我们先来了解一下HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种。请求协议是由 客户机(浏览器)向服务器(WEB SERVER)提交请求时发...
  • m290345792
  • m290345792
  • 2015年09月10日 10:16
  • 3009

HTTP必知必会——断点续传原理

要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。 HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range...
  • zhangliangzi
  • zhangliangzi
  • 2016年05月09日 00:28
  • 6373

Android 断点续传下载功能实现

主要实现文件下载的暂停和继续下载功能。 用到的知识点: 1、Service的使用以及Service与Activity之间的数据交互; 2、SQLite数据库的简单使用; 3、文件下载与存储; ...
  • c19344881x
  • c19344881x
  • 2015年05月19日 16:22
  • 869

Windows自带局域网断点续传功能

其实SMB共享支持断电续传的,就这个命令: copy /z \\server\folder\file.ext D:\downloads\file.ext 1、使用copy 命令...
  • as_314159265
  • as_314159265
  • 2011年12月10日 11:28
  • 4194

FTP协议简介与断点续传功能的实现

背景: 由于移动端业务的需求,应用到了ftp的文件上传功能,并考虑到移动端网络的不稳定性,需要加入断点续传功能。   详细介绍: FTP,文件传输协议是TCP/IP协议组中的协议之一。包括两部...
  • entry521
  • entry521
  • 2016年03月24日 15:21
  • 4890

python实现断点续传下载文件

最近的任务里有一个功能是要我从日志服务器实时跟新日志到本地,日志在不断新增内容就需要我隔一段时间从上次下载的位置继续下载,并写入本地文件上次写完的位置后面。 headers = {'Rang...
  • XiaoPANGXia
  • XiaoPANGXia
  • 2015年08月30日 16:16
  • 5259

JQuery上传插件 HTML5 upload断点续传上传插件

HTML5upload(http://www.html5upload.com)是基于html5技术的,由jquery把上传逻辑封装起来的支持断点续传上传jquery插件。无需安装任何插件,只要浏览器支...
  • onetwofree
  • onetwofree
  • 2017年05月21日 00:02
  • 1069

Java断点续传实现原理很简单

原理解析在开发当中,“断点续传”这种功能很实用和常见,听上去也是比较有“逼格”的感觉。所以通常我们都有兴趣去研究研究这种功能是如何实现的? 以Java来说,网络上也能找到不少关于实现类似功能的资料...
  • ghost_Programmer
  • ghost_Programmer
  • 2016年07月16日 12:59
  • 6139

实现断点续传的两种思路

.在7月份分别做了多线程下载和断点续传 ,但当时只是测试,用了大文件分块传输的方法 实现流程首次传输其流程如下1.服务端向客户端传递文件名称和文件长度2.跟据文件长度计算文件块数3.客户端将传输的块数...
  • chinafe
  • chinafe
  • 2007年10月09日 14:38
  • 2780
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:断点续传
举报原因:
原因补充:

(最多只允许输入30个字)