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

前端之家收集整理的这篇文章主要介绍了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 )
@H_404_178@(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 NSError ?)
-> Void in
//输出下载文件原来的存放目录
print ( "location:\(location)" )
//location位置转换
locationPath = location!.path
//拷贝到用户目录
documnets: String NSHomeDirectory () + "/Documents/1.png"
@H_674_403@//创建文件管理器
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
@H_127_502@ 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
@H_502_556@ 74
75
76
77
78
import UIKit
class ViewController : UIViewController , NSURLSessionDownloadDelegate {
override viewDidLoad() {
super .viewDidLoad()
sessionSeniorDownload()
}
//下载文件
sessionSeniorDownload(){
//下载地址
//请求
: url!)
@H_404_178@
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 delegateQueue: )
})
return currentSession!
}
//下载代理方法,下载结束
func URLSession (session: NSURLSessionDownloadTask didFinishDownloadingToURL location: ) {
//下载结束
( "下载结束" )
@H_403_756@
//输出下载文件原来的存放目录
"location:\(location)" )
//location位置转换
locationPath = location.path
//拷贝到用户目录
documnets: NSHomeDirectory () + "/Documents/2.png"
//创建文件管理器
fileManager: NSFileManager .defaultManager()
"new location:\(documnets)" )
}
//下载代理方法,监听下载进度
didWriteData bytesWritten: Int64 totalBytesExpectedToWrite: ) {
//获取进度
written: CGFloat = ( )(totalBytesWritten)
total: )(totalBytesExpectedToWrite)
pro: = written/total
"下载进度:\(pro)" )
}
//下载代理方法,下载偏移
didResumeAtOffset fileOffset: ) {
//下载偏移,主要用于暂停续传
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
3,使用Upload Task来上传文件
22 @H_404_896@sessionUpload(){
//上传地址
//请求
: url!)
.sharedSession()
//上传数据流
documents = "/Documents/1.png"
imgData = NSData (contentsOfFile: documents)
uploadTask = session.uploadTaskWithRequest(request,fromData: imgData) {
(data: NSURLResponse NSError ?) -> in
//上传完毕后
"上传完毕" )
//使用resume方法启动任务
uploadTask.resume()
}

猜你在找的Swift相关文章