文档章节

NSUrlSession下载图片

 武昌
发布于 2015/12/15 16:06
字数 771
阅读 12
收藏 0
//
//  ViewController.m
//  UrlSession
//
//  Created by dc0061 on 15/12/10.
//  Copyright © 2015年 dc0061. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
{
    UILabel *_url;
    UILabel *tishi;
    
    UITextField *_urlName;//输入框,输入url
    
    UIImageView *_image;
    //添加按钮
    UIButton *_xiazai;
    UIButton *_quxiao;
    UIButton *_guaqi;
    UIButton *_huifu;
    UIProgressView *pro;//进度条
    NSURLSessionDownloadTask *_download;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self layout];
}
//加载控件
- (void) layout{
    _url= [[UILabel alloc]initWithFrame:CGRectMake(40, 50, 50, 40)];
    _url.text=@"网址";
    _url.textColor=[UIColor redColor];
    [self.view addSubview:_url];
    
    _urlName=[[UITextField alloc]initWithFrame:CGRectMake(100, 50, 250, 40)];
    _urlName.borderStyle=UITextBorderStyleRoundedRect;//设置边框样式
    _urlName.text=@"http://dlsw.baidu.com/sw-search-sp/soft/2a/25677/QQ_V4.0.5.1446465388.dmg";
//    _urlName.text=@"http://img15.3lian.com/2015/f2/52/d/45.jpg";
    [self.view addSubview:_urlName];
    
    _image=[[UIImageView alloc]initWithFrame:CGRectMake(40, 120, 300, 400)];
    _image.image=[UIImage imageNamed:@"2"];
    [self.view addSubview:_image];
    
    pro=[[UIProgressView alloc]initWithFrame:CGRectMake(40, 570, 200, 20)];
    [self.view addSubview:pro];
    
    tishi=[[UILabel alloc]initWithFrame:CGRectMake(250, 550, 100, 40)];
    tishi.font=[UIFont systemFontOfSize:10];
    tishi.text=@"正在下载。。。";
    tishi.textColor=[UIColor redColor];
    [self.view addSubview:tishi];
    
    _dowenloadFile=[[UIButton alloc]initWithFrame:CGRectMake(20, 600, 80, 50)];
    [_dowenloadFile setTitle:@"简化下载" forState:UIControlStateNormal];
    [_dowenloadFile setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [_dowenloadFile addTarget:self action:@selector(dowenloadFile) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_dowenloadFile];
    
    _xiazai=[[UIButton alloc]initWithFrame:CGRectMake(110, 600, 50, 50)];
    [_xiazai setTitle:@"下载" forState:UIControlStateNormal];
    [_xiazai setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [_xiazai addTarget:self action:@selector(xiazai) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_xiazai];
    
    _quxiao=[[UIButton alloc]initWithFrame:CGRectMake(170, 600, 50, 50)];
    [_quxiao setTitle:@"取消" forState:UIControlStateNormal];
    [_quxiao setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [_quxiao addTarget:self action:@selector(quxiao) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_quxiao];
    
    _guaqi=[[UIButton alloc]initWithFrame:CGRectMake(230, 600, 50, 50)];
    [_guaqi setTitle:@"挂起" forState:UIControlStateNormal];
    [_guaqi setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [_guaqi addTarget:self action:@selector(guaqi) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_guaqi];
    
    _huifu=[[UIButton alloc]initWithFrame:CGRectMake(290, 600, 50, 50)];
    [_huifu setTitle:@"恢复" forState:UIControlStateNormal];
    [_huifu setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [_huifu addTarget:self action:@selector(huifu) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_huifu];
}


- (void) xiazai{
    NSLog(@"下载");
    //创建一个URL
    NSString *urlstr=_urlName.text;
    urlstr=[urlstr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    
    NSURL *url=[NSURL URLWithString:urlstr];
    //创建请求
    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    //创建session:  NSURLSessionConfiguration配置session  (默认会话  单例)
    NSURLSessionConfiguration *sessionConfig=[NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfig.timeoutIntervalForRequest=20;//请求超时时间
//    sessionConfig.timeoutIntervalForResource=20;//资源超时时间
    //是否允许蜂窝网络下载(2G/3G/4G)   NO: 只能在WiFi的情况下下载
    sessionConfig.allowsCellularAccess=YES;
    
    //创建会话   指定配置和代理
    NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
    _download=[session downloadTaskWithRequest:request];
    //恢复任务
    [_download resume];
}
- (void) quxiao{
    NSLog(@"取消");
    [_download cancel];
}
- (void) guaqi{
    NSLog(@"挂起");
    [_download suspend];
}
- (void) huifu{
    NSLog(@"恢复");
    [_download resume];
}
//更新进度条
- (void) setprogress : (int64_t)totalBytesWritten :(int64_t) totalBytesExpectedToWrite{
    //异步处理进程   (dispatch_get_main_queue())获取主队列
    dispatch_async(dispatch_get_main_queue(), ^{
        pro.progress=(float)totalBytesWritten/totalBytesExpectedToWrite;
        if (pro.progress==1) {
            tishi.text=@"下载完成";
            [UIApplication sharedApplication].networkActivityIndicatorVisible=NO;//屏幕左上角的菊花
        }else{
            [UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
        }
    });
}
//后面三个参数代表:当前下载量,总的下载量,下载文件的总大小
#pragma  mark 下载中会多次调用,可以用来记录进度条    这个是代理中的方法
- (void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    [self setprogress:totalBytesWritten :totalBytesExpectedToWrite];//更新进度条
}

#pragma mark  下载完成会调用的方法
- (void)URLSession:(NSURLSession *)session downloadTask:(nonnull NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(nonnull NSURL *)location{
    NSString *path=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
    path=[path stringByAppendingPathComponent:@"qq1.dmg"];
    NSURL *saveUrl=[NSURL fileURLWithPath:path];//转换成本地的url使用 fileURLWithPath
    //复制文件,从location 拷贝到我想要的位置
    NSError *error;
    [[NSFileManager defaultManager] copyItemAtURL:location toURL:saveUrl error:&error];
    if(error){
        NSLog(@"error : %@",error.localizedDescription);
    }
}

#pragma  mark 不管下载成功与否,都会调用

- (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
    if (error) {
        NSLog(@"error : %@", error.localizedDescription);
    }else{
        NSLog(@"无错误");
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end


© 著作权归作者所有

粉丝 0
博文 40
码字总数 12828
作品 0
宝鸡
iOS工程师
私信 提问
iOS基础深入补完计划--NSURLSession使用详解(附Demo)

目录 前言 API Demo 前言 本文主要是把NSURLSession以及NSURLSessionTask相关的代理方法全部整理了一下。 旨在大体了解在一个iOS网络请求中、一个任务究竟经理了什么。 而我们、又能做些什么...

kirito_song
2018/05/10
0
0
NSURLSession学习笔记(二)Session Task

Session Task分为三种Data Task,Upload Task,Download Task。毫无疑问,Session Task是整个NSURLSession架构的核心目标。 下面写了一个简单的Demo来初步使用下三种任务对象。这里使用的是c...

c-ys
2015/12/09
29
0
iOS-初识网络(一)

iOS中的网络请求可以从如下的类中体现: NSURL: NSURLRequest: NSURLConnection: NSURLResponse: NSURLSession: iOS9+ 1:网络的url决定着和谁通信: url格式 2:怎么通信:多个客户端用不同...

Nlinger
2017/12/06
0
0
NSURLSession学习笔记(三)Download Task

NSURLSession的Download Task用于完成下载任务,本文介绍如何创建断点续传的下载任务和后台下载任务。 我们直接从分析Demo入手: 故事板如下: 只有一个View Controller,用于创建各种下载任...

c-ys
2015/12/09
15
0
IOS——网络编程

基本概念: 客户端(Client):移动应用(iOS,Andorid等应用) 服务器(Server):为客户端提供服务、提供数据、提供资源的机器 请求(Request):客户端向服务器索取数据的⼀种行为 响应(Response):服务...

一人丨星空
2016/09/05
30
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部