DownloadTask-03-网络下载任务

  1 //
  2 //  ViewController.m
  3 //  03-DownloadTask
  4 //
  5 //如果退出程序后仍能实现断点续传,思路:
  6 //1.保存resumeData到本地沙盒路径。
  7 //2.分析resumeData是如何记录下载文件信息的。才能设定下次进入时进度条的进度。
  8
  9 #import "ViewController.h"
 10
 11 @interface ViewController () <NSURLSessionDownloadDelegate> {
 12     NSURLSessionDownloadTask *_downloadTask; //下载任务
 13     NSData *_savedResumeData; //已下载的数据信息
 14
 15     NSURLSession *_downloadSession; //会话对象,可发起多个任务
 16 }
 17
 18 @end
 19
 20 @implementation ViewController
 21
 22 - (void)viewDidLoad {
 23     [super viewDidLoad];
 24     // Do any additional setup after loading the view, typically from a nib.
 25 }
 26
 27 - (void)didReceiveMemoryWarning {
 28     [super didReceiveMemoryWarning];
 29     // Dispose of any resources that can be recreated.
 30 }
 31
 32 - (void)moveDownloadFile:(NSURL *)location ToPath:(NSString *)targetFilePath {
 33
 34     //目标路径
 35     NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:targetFilePath];
 36
 37     NSFileManager *manager = [NSFileManager defaultManager];
 38
 39     //判断目标路径下的文件是否存在,如果不存在,则剪切
 40     BOOL exist = [manager fileExistsAtPath:filePath];
 41     if (!exist) {
 42
 43         [manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:filePath] error:nil];
 44     }
 45
 46     NSLog(@"文件保存成功");
 47
 48
 49 }
 50
 51 //普通下载任务
 52 - (IBAction)commonDownloadAction:(id)sender {
 53
 54     NSURL *url = [NSURL URLWithString:@"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357.mp3"];
 55
 56     NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
 57
 58     _downloadSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
 59
 60     _downloadTask = [_downloadSession downloadTaskWithURL:url];
 61
 62     [_downloadTask resume];
 63
 64
 65 }
 66
 67 //暂停下载
 68 - (IBAction)pauseAction:(id)sender {
 69
 70     if (_downloadTask) {
 71
 72         if (_downloadTask.state == NSURLSessionTaskStateRunning) {
 73
 74             //cancle后此任务停止,不能再恢复。
 75             //[_downloadTask cancel];
 76             [_downloadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
 77                 //resumeData记录了已下载文件的信息,并非记载下载文件的全部数据。
 78                 //记录任务取消时提供的信息。
 79                 _savedResumeData = resumeData;
 80
 81                 //此任务取消后下次会创建一个新的任务,此时应该释放旧任务
 82                 _downloadTask = nil;
 83
 84             }];
 85
 86         }
 87
 88     }
 89
 90 }
 91
 92 //恢复下载
 93 - (IBAction)resumeAction:(id)sender {
 94
 95     if (_savedResumeData) {
 96
 97         //重新发起一个任务,但是是根据之前cancel的任务发起的,通过resumeData来保存之前任务的状态。
 98         _downloadTask = [_downloadSession downloadTaskWithResumeData:_savedResumeData];
 99
100         //释放resumeData
101         _savedResumeData = nil;
102
103         [_downloadTask resume];
104     }
105 }
106
107
108 #pragma mark - NSURLSessionDownloadDelegate
109
110 //下载完成时调用
111 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
112 didFinishDownloadingToURL:(NSURL *)location {
113
114     NSLog(@"location:%@", location);
115
116
117     //把临时目录下的文件剪切到目标文件夹。
118     [self moveDownloadFile:location ToPath:@"Documents/jay.mp3"];
119
120
121     _downloadTask = nil;
122     _downloadSession = nil;
123
124
125 }
126
127 //监听下载进度,此协议方法可能会被调用多次
128 /*
129  bytesWritten:本次传输下载了多少字节
130  totalBytesWritten:已经下载了多少字节
131  totalBytesExpectedToWrite:文件的总大小
132
133  */
134 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
135       didWriteData:(int64_t)bytesWritten
136  totalBytesWritten:(int64_t)totalBytesWritten
137 totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
138
139     float progress = (float)totalBytesWritten / totalBytesExpectedToWrite;
140     self.progressView.progress = progress;
141     self.progressLable.text = [NSString stringWithFormat:@"%.2f%%", progress * 100];
142
143
144
145 }
146 @end
时间: 2024-10-11 22:37:51

DownloadTask-03-网络下载任务的相关文章

Android 网络下载图片

2中方法: 1. public byte[] downloadResource(Context context, String url) throws ClientProtocolException, IOException { isStop = false; ByteArrayBuffer buffer = null; HttpGet hp = new HttpGet(url); httpClient = new DefaultHttpClient(); String netType = is

Android学习笔记--使用Apache HttpClient实现网络下载效果,附带进度条显示

今天学习 了Apache 写了一个网络下载的效果,代码如下,代码中我已经写了很详细的注释了,相信大家都能看懂 1 http://m.blog.csdn.net/article/details?id=52927536 2 3 4 package com.wuxianedu.httpdemo; 5 6 import android.app.ProgressDialog; 7 import android.content.Intent; 8 import android.net.Uri; 9 impo

HttpUtils.java 网络下载工具类

package Http; import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL; /** * 网络下载工具类 * 功能:下载字节数组,下载文本数据 * 下载数字数组(文本 图片 mp3) * 下载文本数据 * Created by lxj-pc on 2017/

网络下载图片 (cell部分)

网络下载图片不能放在主线程: 1.会阻塞主线程:影响用户体验 2.重复下载,浪费流量,浪费时间 推荐第三方框架SDWebImage, 包含的功能:图片下载.图片缓存.下载进度监听.gif处理等等. 导入这个分类:#import "UIImageView+WebCache.h"

asyncTask异步任务:从网络下载图片

[关键字]:3个参数,4个步骤 第一步:表示任务执行前的操作 第二步:主要完成耗时操作 第三步:主要是更新UI操作 第四步:产生最终结果 以下实例中代表的含义为: 第一步:显示进度条 第二步:(此任务必不可少)在后台执行任务,将进度值传给第三步,将结果传给第四步: 第三步:进度值更新 第四步:产生最终结果 1.添加网络授权: 因为手机默认不能访问网络,所以首先要在清单文件 AndroidManifest.xml中添加网络授权. 方法如下: 打开AndroidManifest.xml文件,点击"P

sharepoint 2007 “文件为网络下载文件,请存储到硬盘之后再修改文件。”

当直接打开sharepoint 2007 上的excel文档后,使用使用ctrl+s保存的时候,就弹出对话框"文件为网络下载文件,请存储到硬盘之后再修改文件." 检查发现是sharepoint上安装了第三方加密工具trustview导致的. 解决办法:1.点击保存按钮保存 2.使用"迁出"后,打开文档 3.在excel中关闭trustview插件: excel options--add-ins--mamage下面选择com add-ins--然后点Go--取消选择:

网络下载器

网络下载器: public static void main(String[] args) { OutputStream download=null; HttpURLConnection conn=null; try { URL url=new URL ("http://dlc2.pconline.com.cn/filedown_171040_8417060/Yx2PSEuB/jpwb2017cl.exe"); conn=(HttpURLConnection) url.openConn

Androiid_Volley+Image-Loader+RecyclerView实现网络下载图片瀑布流

转载表明出处:http://blog.csdn.net/zcr317121966/article/details/52329803 要实现网络数据下载实现瀑布流效果: 实现思路很简单,主要是熟悉框架的运用.首先要写一个通用的MyRequest类,用于从网上获取json数据用Gson解析并返回bean对象 之后要设置recyclerview适配器MyAdapter,将返回的数据里面的网址集合加载到适配器中,下载相对应的图片,并用随机高度设置 其图片高度用于美观. 在写代码之前要导入几个架包,分别是

从网络下载图片,保存,并用UIImageView从保存中显示

代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIImageView *img=[[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)]; img.backgroundColor=[UIColor redColor]; [self.view addSubview:img]; /

iOS如何阅览和选择应用打开网络下载的pdf、word、jpg、MP4等文件

通过创建UIDocumentInteractionController来实现这一功能,如下栗子: #pragma mark - 展示文件 - (void)showDownloadFile:(NSString *)fileName{ // 从沙盒中获取(以下路径是我从网络下载文件存放的路径) NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) fir