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 UIKit class 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 ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之0303最大数
题目 解决代码及点评 这道题考察对条件分支和赋值的灵活应用 正常思维 如果 a>b and a>c 那么a最大 如果b>c and b>a 那么b最大 如果c>a ...
- win32 api Windows窗口的创建
windows窗口的创建有以下几个步骤: 1.创建注册窗口类 2.创建窗口句柄 3.显示更新窗口 4.消息循环 1.创建注册窗口类 所谓创建窗口类就是定义一个WNDCLASS类对象,并将该对象进行初始 ...
- [每日一题] 11gOCP 1z0-052 :2013-09-14 repeated parsing activity.................................A70
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/11699299 正确答案:D SQL语句的执行过程: 1.客户端输入sql语句update ...
- JNI_Java Native Interface
一.简介 Java Native Interface(JNI),java与c/c++交互的接口,下面是一个简单是示例. javah 可以生成native方法对应的头文件,javap 可以查看方法或者属 ...
- django在视图中使用模板
在视图中使用模板 在学习了模板系统的基础之后,现在让我们使用相关知识来创建视图. 重新打开我们在前一章在 mysite.views 中创建的 current_datetime 视图. 以下是其内容 ...
- 详细解析BluetoothAdapter的详细api
(1)开关状态值 (2)扫描状态值 (3)蓝牙操作接收的广播 (4)蓝牙操作请求的广播 (5)附加域 (6)错误码 (1)获取蓝牙适配器 (2)获取state状态方法 (3)蓝牙是否可用 (4)打开蓝 ...
- 一入python深似海--浅拷贝与深拷贝
python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝. 要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用 ...
- Visual Studio 2012中编写C程序
换了win7系统后,突然发现VC++6.0不兼容了,我听说有的同学的行,反正我是不行. 那就用VS2012呗.... 我们来看看怎么用: 打开文件->新建->项目,新建一个项目 选择win ...
- BZOJ 3236: [Ahoi2013]作业( 莫队 + BIT )
莫队..用两个树状数组计算.时间复杂度应该是O(N1.5logN). 估计我是写残了...跑得很慢... ----------------------------------------------- ...
- 【centos6 , 6】linux 查看帮助文档:
1. 使用 命令 -h 或 命令 --help , 例: ls -h 2. man命令 : man 命令 例:man ls 3.info命令: ...