zoukankan      html  css  js  c++  java
  • [Swift通天遁地]四、网络和线程-(9)上传图片并实时显示上传进度

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10223337.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[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 }
  • 相关阅读:
    集群、分布式与微服务概念和区别理解
    博弈论的入门——nim游戏&&sg函数浅谈
    csp-2020 初赛游记
    洛谷 P2340 [USACO03FALL]Cow Exhibition G 题解
    P5687 [CSP-SJX2019]网格图 题解
    HBase 数据迁移/备份方法
    mac远程连接服务上传下载命令实例
    Redis安装详细步骤
    VMware虚拟机中的CentOS服务安装Nginx后本机无法访问的解决办法
    开发业务逻辑处理之策略模式场景使用
  • 原文地址:https://www.cnblogs.com/strengthen/p/10223337.html
Copyright © 2011-2022 走看看