本文将演示如何通过网址会话对象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 }