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

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10222721.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         simpleDownload()
    12 
    13         //实时显示下载进度的图片下载功能
    14         complexDownload()
    15     }
    16     
    17     //添加一个方法,
    18     //通过访问服务器的接口,下载并保存一个文本文件
    19     func simpleDownload()
    20     {
    21         //初始化一个下载请求对象,并设置下载后的存储目录,位于沙箱的文档目录中。
    22         let destination = DownloadRequest.suggestedDownloadDestination(
    23             for: .documentDirectory,
    24             in: .userDomainMask
    25         )
    26         //在控制台输出沙箱中的文档目录,
    27         //使用这条日志信息,进入该目录并查看下载后的文件。
    28         print(NSHomeDirectory()+"/Documents")
    29         
    30         //调用网络操作库的下载方法,下载指定的服务器接口,
    31         //并将下载后的文件存储在指定的目录中。
    32         let result = Alamofire.download("https://httpbin.org/stream/1", to: destination)
    33         //控制台输出结果
    34         print(result)
    35     }
    36     
    37     //添加一个方法,
    38     //实现一个可实时显示下载进度的图片下载功能
    39     func complexDownload()
    40     {
    41         //初始化一个下载请求对象,并设置下载后的存储目录,位于沙箱的文档目录中。
    42         let destination = DownloadRequest.suggestedDownloadDestination(
    43             for: .documentDirectory,
    44             in: .userDomainMask
    45         )
    46         
    47         //还可以设置服务器接口的请求参数
    48         let parameters: Parameters = ["foo": "bar"]
    49         
    50         //调用网络操作库的下载方法,下载指定的服务器接口,
    51         //并将下载后的文件存储在指定的目录中。
    52         Alamofire.download("http://images.apple.com/v/home/cx/images/gallery/iphone_large_2x.jpg", 
    53                             method: .get, 
    54                             parameters: parameters,
    55                             encoding: JSONEncoding.default,
    56                             to: destination)
    57             //通过一个下载进度方法块,处理图片下载的事件
    58             .downloadProgress(queue: DispatchQueue.global())
    59             {
    60                 progress in
    61                 //在控制台输出:进度的完成比例
    62                 print("Progress1: (progress.fractionCompleted)")
    63                 //在控制台输出:已经下载的字节数
    64                 print("Progress2: (progress.completedUnitCount)")
    65                 //在控制台输出:全部的字节数
    66                 print("Progress3: (progress.totalUnitCount)")
    67             }
    68             //完成的图片的下载后执行验证方法,此处返回成功标识
    69             .validate { request, response, temporaryURL, destinationURL in
    70                 return .success
    71             }
    72             //处理图片下载后的返回信息
    73             .responseJSON { response in
    74                 //在控制台输出:网络返回对象
    75                 debugPrint("response:(response)")
    76                 //在控制台输出:图片下载临时存放的位置
    77                 print("response.temporaryURL:(response.temporaryURL)")
    78                 //在控制台输出:下载后的存储位置
    79                 print("response.destinationURL:(response.destinationURL)")
    80             }
    81     }
    82 
    83     override func didReceiveMemoryWarning() {
    84         super.didReceiveMemoryWarning()
    85         // Dispose of any resources that can be recreated.
    86     }
    87 }
  • 相关阅读:
    apicloud入门学习笔记1:简单介绍
    QT入门学习笔记1:为什么要选QT及QT软件下载
    Altium Designer入门学习笔记1.软件安装与资料收集
    win 下安装mysql 服务
    几秒后跳转到新页面
    计算3天的日期
    alibaba json
    WebService和Rest Service
    count(*),count(1)和count(主键)的区别
    mybatis替换符号
  • 原文地址:https://www.cnblogs.com/strengthen/p/10222721.html
Copyright © 2011-2022 走看看