[Swift通天遁地]四、网络和线程,9上传图片并实时显示上传进度

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

➤微信公众号:山青咏芝(shanqingyongzhi)

➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/

➤GitHub地址:https://github.com/strengthen/LeetCode

➤原文地址:

➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。

➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[Swift]通天遁地Swift

本文将演示上传图片至服务器,并实时显示上传的进度。

首先确保在项目中已经安装了所需的第三方库。

点击【Podfile】,查看安装配置文件。

1 source 'https://github.com/CocoaPods/Specs.git'
2 platform :ios, '12.0'
3 use_frameworks!
4 
5 target ‘DemoApp’ do
6     pod 'Alamofire', '~> 4.0'
7 end

根据配置文件中的相关配置,安装第三方库。

然后点击打开【DemoApp.xcworkspace】项目文件。

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

现在开始编写代码,实现图片上传的功能。

 1 import UIKit
 2 //在当前的类文件中,引入已经安装的第三方类库
 3 import Alamofire
 4 
 5 class ViewController: UIViewController {
 6 
 7     override func viewDidLoad() {
 8         super.viewDidLoad()
 9         // Do any additional setup after loading the view, typically from a nib.
10         //简单的图片上传功能
11         simpleUpload()
12         
13         //实时显示上传进度的图片上传功能
14         complexUpload()
15     }
16     
17     //添加一个方法,首先实现一个简单的上传动作
18     func simpleUpload()
19     {
20         //获得项目中图片所在的路径
21         let fileURL = Bundle.main.url(forResource: "iphone_large_2x", withExtension: "jpg")
22         //调用网络操作库的上传方法,将指定位置的图片文件,上传到服务器接口。
23         Alamofire.upload(fileURL!,to:"https://httpbin.org/post")
24             .validate()
25             .responseJSON { response in
26                 //上传完成之后,返回主线程,弹出上传结束的提示信息
27                 DispatchQueue.main.async{
28                     //获得服务器返回对象的结果信息
29                     let message = "Result:\(response.result)"
30                     
31                     //创建一个警告窗口,并设置弹出窗口的标题、信息和样式等属性
32                     let alert = UIAlertController(title: "Information", //标题
33                                                   message: message, //信息
34                                                   preferredStyle: UIAlertControllerStyle.alert)//样式
35                     //初始化一个警告动作的按钮控件,当点击该按钮时,关闭弹出窗口。
36                     let OKAction = UIAlertAction(title: "OK", 
37                                                   style: UIAlertActionStyle.default,
38                                                   handler: nil)
39                     //将警告动作添加到窗口中,
40                     alert.addAction(OKAction)
41                     //然后弹出警告窗口
42                     self.present(alert, animated: true, completion: nil)
43                 }
44         }
45     }
46     
47     //添加一个方法,
48     //实现一个可实时显示上传进度的图片上传功能
49     func complexUpload()
50     {
51         //获得项目中图片所在的路径
52         let fileURL = Bundle.main.url(forResource: "iphone_large_2x", withExtension: "jpg")
53         //调用网络操作库的上传方法,将指定位置的图片文件,上传到服务器接口。
54         Alamofire.upload(fileURL!,to:"https://httpbin.org/post")
55             //在上传进度的方法中,处理返回的进度信息
56             .uploadProgress { progress in
57                 
58                 //在控制台输出:上传进度的完成比例
59                 print("---fractionCompleted:\(progress.fractionCompleted)")
60                 //在控制台输出:已经上传的字节数
61                 print("---completedUnitCount:\(progress.completedUnitCount)")
62                 //在控制台输出:总的字节数
63                 print("---totalUnitCount:\(progress.totalUnitCount)")
64             }
65             //调用验证方法,验证上传的任务
66             .validate()
67             //处理上传结束后,服务器返回的数据
68             .responseJSON { response in
69                 //上传完成之后,返回主线程,弹出上传结束的提示信息
70                 DispatchQueue.main.async{
71                     //在控制台输出:服务器返回对象的结果信息
72                     print("---Result:\(response.result)")
73                     //获得服务器返回对象的结果信息
74                     let message = "Result:\(response.result)"
75                     
76                     //创建一个警告窗口,并设置弹出窗口的标题、信息和样式等属性
77                     let alert = UIAlertController(title: "Information", //标题
78                                                   message: message,//信息
79                                                   preferredStyle: UIAlertControllerStyle.alert)//样式
80                     //初始化一个警告动作的按钮控件,当点击该按钮时,关闭弹出窗口。
81                     let OKAction = UIAlertAction(title: "OK", 
82                                                   style: UIAlertActionStyle.default, 
83                                                   handler: nil)
84                     //将警告窗口添加到窗口中
85                     alert.addAction(OKAction)
86                     //然后弹出警告窗口
87                     self.present(alert, animated: true, completion: nil)
88                 }
89             }
90     }
91 
92 
93     override func didReceiveMemoryWarning() {
94         super.didReceiveMemoryWarning()
95         // Dispose of any resources that can be recreated.
96     }
97 }