Swift - 使用NSURLSession加载数据、下载、上传文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
func sessionLoadData(){ //创建NSURL对象 let url:NSURL! = NSURL(string:urlString) //创建请求对象 let request:NSURLRequest = NSURLRequest(URL: url) let session = NSURLSession.sharedSession() let dataTask = session.dataTaskWithRequest(request, completionHandler: {(data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in if error != nil{ print(error?.code) print(error?.description) }else{ let str = NSString(data: data!, encoding: NSUTF8StringEncoding) print(str) } }) as NSURLSessionTask //使用resume方法启动任务 dataTask.resume() } |
2,使用Download Task来下载文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
func sessionSimpleDownload(){ //下载地址 //请求 var request:NSURLRequest = NSURLRequest(URL: url!) let session = NSURLSession.sharedSession() //下载任务 var downloadTask = session.downloadTaskWithRequest(request, completionHandler: { (location:NSURL!, response:NSURLResponse!, error:NSError!) -> Void in //输出下载文件原来的存放目录 println("location:\(location)") //location位置转换 var locationPath = location.path //拷贝到用户目录 let documnets:String = NSHomeDirectory() + "/Documents/1.png" //创建文件管理器 var fileManager:NSFileManager = NSFileManager.defaultManager() fileManager.moveItemAtPath(locationPath!, toPath: documnets, error: nil) println("new location:\(documnets)") }) //使用resume方法启动任务 downloadTask.resume()} |
(2)实时获取进度
需要使用自定义的NSURLSession对象和downloadTaskWithRequest方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
import UIKitclass ViewController: UIViewController ,NSURLSessionDownloadDelegate { override func viewDidLoad() { super.viewDidLoad() sessionSeniorDownload() } //下载文件 func sessionSeniorDownload(){ //下载地址 //请求 var request:NSURLRequest = NSURLRequest(URL: url!) let session = currentSession() as NSURLSession //下载任务 var downloadTask = session.downloadTaskWithRequest(request) //使用resume方法启动任务 downloadTask.resume() } //创建一个下载模式 func currentSession() -> NSURLSession{ var predicate:dispatch_once_t = 0 var currentSession:NSURLSession? = nil dispatch_once(&predicate, { var config = NSURLSessionConfiguration.defaultSessionConfiguration() currentSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil) }) return currentSession! } //下载代理方法,下载结束 func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) { //下载结束 println("下载结束") //输出下载文件原来的存放目录 println("location:\(location)") //location位置转换 var locationPath = location.path //拷贝到用户目录 let documnets:String = NSHomeDirectory() + "/Documents/1.png" //创建文件管理器 var fileManager:NSFileManager = NSFileManager.defaultManager() fileManager.moveItemAtPath(locationPath!, toPath: documnets, error: nil) println("new location:\(documnets)") } //下载代理方法,监听下载进度 func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { //获取进度 var written:CGFloat = (CGFloat)(totalBytesWritten) var total:CGFloat = (CGFloat)(totalBytesExpectedToWrite) var pro:CGFloat = written/total println("下载进度:\(pro)") } //下载代理方法,下载偏移 func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) { //下载偏移,主要用于暂停续传 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }} |
3,使用Upload Task来上传文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
func sessionUpload(){ //上传地址 //请求 var request:NSURLRequest = NSURLRequest(URL: url!) let session = NSURLSession.sharedSession() //上传数据流 let documents = NSHomeDirectory() + "/Documents/1.png" var imgData = NSData(contentsOfFile: documents) var uploadTask = session.uploadTaskWithRequest(request, fromData: imgData) { (data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in //上传完毕后 println("上传完毕") } //使用resume方法启动任务 uploadTask.resume()} |
Swift - 使用NSURLSession加载数据、下载、上传文件的更多相关文章
- iOS开发——网络Swift篇&NSURLSession加载数据、下载、上传文件
NSURLSession加载数据.下载.上传文件 NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的 ...
- https 协议下服务器根据网络地址下载上传文件问题
https 协议下服务器根据网络地址下载上传文件遇到(PKIX:unable to find valid certification path to requested target 的问题) 使用h ...
- git下载/上传文件提示:git did not exit cleanly
问题:git操作下载/上传文件,提示信息如下 TortoiseGit-git did not exit cleanly (exit code 1) TortoiseGit-git did not ex ...
- Android 利用an框架快速实现网络请求(含下载上传文件)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...
- $Django ajax简介 ajax简单数据交互,上传文件(form-data格式数据),Json数据格式交互
一.ajax 1 什么是ajax:异步的JavaScript和xml,跟后台交互,都用json 2 ajax干啥用的?前后端做数据交互: 3 之前学的跟后台做交互的方式: -第一种:在浏览器 ...
- 前台提交数据(表单数据、Json数据及上传文件)的类型
MIME (Multipurpose Internet Mail Extensions) 是描述内容类型的互联网标准.Clients use this content type or media ty ...
- 从Linux服务器下载上传文件
首先要确定好哪两种的连接:Linux常用的有centors和unbantu两种版本,PC端Mac和Windows 如果在两个Linux之间传输,或Linux和Mac之间传输可以使用scp命令,类似于s ...
- 亚马逊S3下载上传文件
引用网址: http://www.jxtobo.com/27697.html 下载 CloudBerry Explorer http://www.cloudberrylab.com/download- ...
- java Socket Tcp示例三则(服务端处理数据、上传文件)
示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...
随机推荐
- Vijos P1740聪明的质检员
题目 描述 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是:1.给定m个区间[Li,Ri]:2. ...
- Uva 167 The Sultan's Successors(dfs)
题目链接:Uva 167 思路分析:八皇后问题,采用回溯法解决问题. 代码如下: #include <iostream> #include <string.h> using n ...
- 首届全球RTB(实时竞价)广告DSP算法大赛
首届全球RTB(实时竞价)广告DSP算法大赛 竞赛指南 RTB (Real Time Bidding, 实时竞价) 是近年来计算广告领域最激动人心的进展之一. 它增加了展示广告的透明度与效率, ...
- UVA 270 Lining Up 共线点 暴力
题意:给出几个点的位置,问一条直线最多能连过几个点. 只要枚举每两个点组成的直线,然后找直线上的点数,更新最大值即可. 我这样做过于暴力,2.7s让人心惊肉跳...应该还能继续剪枝的,同一直线找过之后 ...
- ZSTU OJ 3999 零基础学算法---邻接表
题目:Click here 题意:我就喜欢中文题! 分析:这个题虽然是中文题,但是还是有一点费解的.其实就是给你一棵树,是用图的形式给你的,只知道a,b之间有一条边,并不知道谁是父,谁是子.思路就是先 ...
- BZOJ 3275: Number( 最小割 )
S->每个奇数,每个偶数->T各连一条边, 容量为这个数字.然后不能同时选的两个数连容量为+oo的边. 总数-最大流即是答案. 因为满足a2+b2=c2的a,b一定是一奇一偶或者两个偶数, ...
- jQuery特效手风琴特效 手写手风琴网页特效
今天写一个简单的手风琴效果,不用插件,利用强大的jQuery,写一个手风琴效果. 页面预览,请点击这里预览: 手风琴预览 案例分析: html结构 就是一个大盒子里面放着5个li,每个li的小小是2 ...
- Python 2.7 学习笔记 基本知识
python是一种解释型的.面向对象的.带有动态语义的高级程序设计语言.本文介绍下python的基本知识. 一.安装 各种操作系统有自己的安装方法,linux系统一般都自带了python的环境.这里不 ...
- php 遍历文件夹及文件,获取文件名和文件路径存入数据库中
<?php header("Content-Type:text/html; charset=gbk"); require('../../include/connect.php ...
- BZOJ 2599 [IOI2011]Race【Tree,点分治】
给出N(1 <= N <= 200000)个结点的树,求长度等于K(1 <= K <= 1000000)的路径的最小边数. 点分治,这道题目和POJ 2114很接近,2114是 ...