[Swift通天遁地]4、網絡和線程-(9)上傳圖片並實時顯示上傳進度

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-xzltzogk-kw.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

目錄:[Swift]通天遁地Swiftios

本文將演示上傳圖片至服務器,並實時顯示上傳的進度。git

首先確保在項目中已經安裝了所需的第三方庫。github

點擊【Podfile】,查看安裝配置文件。swift

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】網絡

如今開始編寫代碼,實現圖片上傳的功能。iphone

 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 }
相關文章
相關標籤/搜索