加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 07:16:08 所属栏目:百科 来源:网络整理
导读: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 sessionLo
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 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 = (string: "http://hangge.com/blog/images/logo.png" )
//请求
: 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 delegateQueue: )
})
return currentSession!
}
//下载代理方法,下载结束
func URLSession (session: NSURLSessionDownloadTask didFinishDownloadingToURL location: ) {
//下载结束
( "下载结束" )
//输出下载文件原来的存放目录
"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
sessionUpload(){
//上传地址
"http://hangge.com/" )
//请求
: url!)
.sharedSession()
//上传数据流
documents = "/Documents/1.png"
imgData = NSData (contentsOfFile: documents)
uploadTask = session.uploadTaskWithRequest(request,fromData: imgData) {
(data: NSURLResponse NSError ?) -> in
//上传完毕后
"上传完毕" )
//使用resume方法启动任务
uploadTask.resume()
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!