使用 Alamofire 的下载速率

Posted

技术标签:

【中文标题】使用 Alamofire 的下载速率【英文标题】:download rate using Alamofire 【发布时间】:2018-08-15 12:13:12 【问题描述】:

我正在使用此功能编写带有 alamofire 模块的下载器应用程序我想以 MB/s 为单位显示当前下载速率,但我真的不知道如何实现这一点,请帮助我。


  @IBAction func tapStartButton(_ sender: Any) 



    let fileUrl = self.getSaveFileUrl(fileName: Data[0] as String)
    let destination: DownloadRequest.DownloadFileDestination =  _, _ in
        return (fileUrl, [.removePreviousFile, .createIntermediateDirectories])
    

    self.request = Alamofire.download(Data[0] as String , to:destination)

        .downloadProgress  (progress) in



        self.progressCircle.progress = progress.fractionCompleted




        cell.progressLabel.isHidden = false


        

        .responseData  (data) in

            self.Data.removeFirst()
                self.startButton.isHidden = false
                self.pauseButton.isHidden = true


【问题讨论】:

【参考方案1】:

我不认为 Alamofire 或任何其他库提供下载速度。开发人员必须自己计算。 你可以这样做:

获取一个保存之前下载字节的全局变量。 使用 NSTimer 以 1 秒为间隔计算速度。

代码示例:

  var prevDownloadedBytes: Int = 0
  var totalDownloadedBytes: Int = 0

  func calculateDownloadSpeed()
   Timer.scheduleWith(timeInterval: 1.0, repeats: true)
     speed = totalDownloadedBytes - prevDownloadedBytes
     print("Speed is: \(speed) bps")
     prevDownloadedBytes = totalDownloadedBytes 
  


  @IBAction func tapStartButton(_ sender: Any) 
    self.request = Alamofire.download(Data[0] as String , to:destination)
        .downloadProgress  (progress) in

        //Set Total Downloaded bytes here
        self.totalDownloadedBytes = progress.fileCompletedCount

        self.progressCircle.progress = progress.fractionCompleted
        cell.progressLabel.isHidden = false
        
        .responseData  (data) in
            self.Data.removeFirst()
                self.startButton.isHidden = false
                self.pauseButton.isHidden = true

【讨论】:

谢谢它对我来说工作得很好我有另一个关于 Progress 类的问题,它有一个名为estimatedtimeremaining 的int 类型的属性?我如何使用它,因为它似乎每次都为零 谢谢它的工作。另一个问题我如何在 Progress 类中使用估计的剩余时间,类型是 int?当我称之为它时,它总是为零 您可以在 Apple 的官方页面查看所有详细信息。 link calculateDownloadSpeed 函数确实存在严重问题,我该如何阻止它?我已经尝试了 if 语句带有 bool 属性,但它当然不起作用,因为第一次它是真的并且它继续运行我该怎么办? @mahadshahib 将您的计时器对象存储在变量中,例如。 var timer: Timer! timer = Timer.scheduleWith(timeInterval: 1.0, repeats: true).... 当你需要停止计时器时,请致电timer.invalidate()

以上是关于使用 Alamofire 的下载速率的主要内容,如果未能解决你的问题,请参考以下文章

BT限制上传速率下载慢问题

上行速率和下行速率

如何限制请求 python 库中 HTTP 请求的下载速率?

带宽和下载速率的关系

Nginx限制用户下载文件速率

Android 中获取网络下载速率的方法