断点续传

转载 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

winform真正实现断点续传功能

  • 2017年12月08日 14:49
  • 67KB
  • 下载

C# 文件分片断点续传

  • 2017年11月07日 11:40
  • 61.53MB
  • 下载

阿里云OSS单文件断点续传+前端 简单展示(springmvc架构)

业务没有需要多文件一起上传,所以这里只是单文件,多文件的话也是在获得File的地方变成List即可,多个循环,多一些线程,网上有代码一、pom.xml ...

多线程断点续传

  • 2015年03月25日 11:34
  • 12KB
  • 下载

安卓多线程下载,断点续传

  • 2016年06月18日 19:31
  • 1.29MB
  • 下载

OkHttp实现多线程断点续传下载,单例模式下多任务下载管理器,一起抛掉sp,sqlite的辅助吧

最近项目需要使用到断点下载功能,笔者比较喜欢折腾,想方设法抛弃SharedPreferences,尤其是sqlite作记录辅助,改用临时记录文件的形式记录下载进度,本文以断点下载为例。...

实现安卓文件断点续传

  • 2016年02月01日 17:56
  • 714KB
  • 下载

Android DownloadManager 的使用及断点续传

官方API:http://developer.android.com/reference/android/app/DownloadManager.html Class Overview T...

断点续传下载

  • 2016年08月25日 10:42
  • 26.64MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:断点续传
举报原因:
原因补充:

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