微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift - 使用NSURLSession加载数据、下载、上传文件

NSURLSession类支持三种类型的任务:加载数据、下载和上传。下面通过样例分别进行介绍。

1,使用Data Task加载数据
使用全局的sharedSession()和dataTaskWithRequest方法创建。
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 urlString: String = "http://hangge.com"
url: NSURL ! = (string:urlString)
//创建请求对象
request: NSURLRequest = ( URL : url)
session = NSURLSession .sharedSession()
dataTask = session.dataTaskWithRequest(request,
completionHandler: {(data,response,error) -> Void in
if error != nil {
print (error?.code)
(error?.description)
} else {
str = Nsstring (data: data!,encoding: NSUTF8StringEncoding )
(str)
}
}) as NSURLSessionTask
//使用resume方法启动任务
dataTask.resume()
}

2,使用Download Task来下载文件
(1)不需要获取进度
使用sharedSession()和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
func sessionSimpleDownload(){
//下载地址
let url = NSURL (string: "http://hangge.com/blog/images/logo.png" )
//请求
request: NSURLRequest = ( URL : url!)
session = NSURLSession .sharedSession()
//下载任务
downloadTask = session.downloadTaskWithRequest(request,
completionHandler: { (location: ?,response: NSURLResponse ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,error: NSError ?)
-> Void in
//输出下载文件原来的存放目录
print ( "location:\(location)" )
//location位置转换
locationPath = location!.path
//拷贝到用户目录
documnets: String NSHomeDirectory () + "/Documents/1.png"
//创建文件管理器
fileManager: NSFileManager .defaultManager()
try! fileManager.moveItemAtPath(locationPath!,toPath: documnets)
"new location:\(documnets)" )
})
//使用resume方法启动任务
downloadTask.resume()
}

(2)实时获取进度
需要使用自定义的NSURLSession对象和downloadTaskWithRequest方法
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
77
78
import UIKit
class ViewController : UIViewController , NSURLSessionDownloadDelegate {
override viewDidLoad() {
super .viewDidLoad()
sessionSeniorDownload()
}
//下载文件
sessionSeniorDownload(){
//下载地址
//请求
: url!)
session = currentSession() NSURLSession
//下载任务
downloadTask = session.downloadTaskWithRequest(request)
//使用resume方法启动任务
downloadTask.resume()
}
//创建一个下载模式
currentSession() -> {
var predicate:dispatch_once_t = 0
currentSession: ? = nil
dispatch_once(&predicate,{
config = NSURLSessionConfiguration .defaultSessionConfiguration()
currentSession = (configuration: config,delegate: self ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,
delegateQueue: )
})
return currentSession!
}
//下载代理方法,下载结束
func URLSession (session: ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,downloadTask: NSURLSessionDownloadTask ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,
didFinishDownloadingToURL location: ) {
//下载结束
( "下载结束" )
//输出下载文件原来的存放目录
"location:\(location)" )
//location位置转换
locationPath = location.path
//拷贝到用户目录
documnets: NSHomeDirectory () + "/Documents/2.png"
//创建文件管理器
fileManager: NSFileManager .defaultManager()
"new location:\(documnets)" )
}
//下载代理方法,监听下载进度
didWriteData bytesWritten: Int64 ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,totalBytesWritten: ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,
totalBytesExpectedToWrite: ) {
//获取进度
written: CGFloat = ( )(totalBytesWritten)
total: )(totalBytesExpectedToWrite)
pro: = written/total
"下载进度:\(pro)" )
}
//下载代理方法,下载偏移
didResumeAtOffset fileOffset: ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,expectedTotalBytes: ) {
//下载偏移,主要用于暂停续传
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
3,使用Upload Task来上传文件
22
sessionUpload(){
//上传地址
//请求
: url!)
.sharedSession()
//上传数据流
documents = "/Documents/1.png"
imgData = NSData (contentsOfFile: documents)
uploadTask = session.uploadTaskWithRequest(request,fromData: imgData) {
(data: ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,response: NSURLResponse ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,error: NSError ?) -> in
//上传完毕后
"上传完毕" )
//使用resume方法启动任务
uploadTask.resume()
}

原文地址:https://www.jb51.cc/swift/324582.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐