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 }
  • 相关阅读:
    hdu 1290 献给杭电五十周年校庆的礼物 (DP)
    hdu 3123 GCC (数学)
    hdu 1207 汉诺塔II (DP)
    hdu 1267 下沙的沙子有几粒? (DP)
    hdu 1249 三角形 (DP)
    hdu 2132 An easy problem (递推)
    hdu 2139 Calculate the formula (递推)
    hdu 1284 钱币兑换问题 (DP)
    hdu 4151 The Special Number (DP)
    hdu 1143 Tri Tiling (DP)
  • 原文地址:https://www.cnblogs.com/strengthen/p/10223337.html
Copyright © 2011-2022 走看看