[Xcode 实际操作]八、网络与多线程-(15)使用网址会话对象URLSession下载图片并存储在沙箱目录中

目录:[Swift]Xcode实际操作

本文将演示如何通过网址会话对象URLSession下载图片并存储在沙箱目录中。

网址会话对象URLSession具有在后台上传和下载、暂停和恢复网络操作、丰富的代理模式等优点。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4     
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8         
 9         //创建一个网址对象,指定请求网络数据的网址。
10         let url = URL(string: "https://www.cnblogs.com/strengthen/images/logo.png")
11         //创建一个网络请求对象
12         let request:URLRequest = URLRequest(url: url!)
13         
14         //网址会话URLSession在2013年发布,苹果对它的定位是作为旧的网络请求接口的替代者。
15         //这里获得网址会话的单例对象
16         let urlSession = URLSession.shared
17 
18         //网址会话单例对象提供了三种类型的网络请求服务。
19         //1.数据任务
20         //2.上传任务
21         //3.下载任务
22         //此处创建一个下载任务的网络请求
23         let downloadTask = urlSession.downloadTask(with: request, completionHandler: { (location:URL?, response:URLResponse?, error:Error?) -> Void in
24                 //创建一个异常捕捉语句,用来执行图片下载后的移动操作
25                 do
26                 {
27                     //获得网络下载后,位于缓存目录的,图片原始存储路径
28                     let originalPath = location!.path
29                     //并在控制台打印输出原始存储路径
30                     print("Original location:(originalPath)")
31                     
32                     //创建一个字符串,作为图片存储的目标位置
33                     let targetPath:String = NSHomeDirectory() + "/Documents/logo.png"
34                     
35                     //获得文件管理对象,它的主要功能包括:
36                     //1.读取文件中的数据
37                     //2.向文件中写入数据
38                     //3.删除或复制文件
39                     //4.移动文件
40                     //5.比较两个文件的内容
41                     //6.测试文件的存在性
42                     let fileManager:FileManager = FileManager.default
43                     //将下载后的图片,从原始位置,移动到目标位置
44                     try fileManager.moveItem(atPath: originalPath, toPath: targetPath)
45                     //在控制台打印输出图片存储后的位置
46                     print("new location:(targetPath)")
47                 }
48                 catch
49                 {
50                     print("Network error.")
51                 }
52         })
53         
54         //任务创建后,调用resume方法开始工作
55         downloadTask.resume()
56     }
57     
58     override func didReceiveMemoryWarning() {
59         super.didReceiveMemoryWarning()
60         // Dispose of any resources that can be recreated.
61     }
62 }
原文地址:https://www.cnblogs.com/strengthen/p/10062081.html