iOS,Swift:串行下载多个文件并将所有文件的单个进度条显示为一个进度

     2023-02-24     9

关键词:

【中文标题】iOS,Swift:串行下载多个文件并将所有文件的单个进度条显示为一个进度【英文标题】:iOS, Swift : Download multiple file serially and showing single progress bar for all file as a one progress 【发布时间】:2020-01-23 07:25:12 【问题描述】:

我正在使用我的 ios(swift4) 应用程序中的 Alamofire 下载 zip 文件。我可以使用 Alamofire 连续下载文件。 但我也想为所有下载的文件显示一个进度条。表示如果我有 4 个 zip 文件,并且当所有文件都下载完毕后,进度应该是 100%。

直到我尝试了下面的代码,它为每个 url 提供了一个进度值,并且进度显示为一个下载的文件,显示进度为 100%,然后再次从 0 开始第二个 url,当第二个 url 下载然后进度显示 100% 完成。

请指导我。当使用 Alamofire 下载所有文件时,我希望将进度值设为 100%。

Alamofire 可以吗?

代码:

func serialZipFileDownload(downloadPath: String)
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let name = self.offlineDownloadFileName?[urlCount]
    let currentVideoURL = documentsURL.appendingPathComponent(name ?? "Default.zip")
    let str = downloadPath
    let urlString = str.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
    let url = URL(string: urlString ?? "")

if super.isConnectedToNetwork() == true 
    let manager = Alamofire.SessionManager.default
    let headers = ["Accept-Encoding" : ""]

    manager.request(url ?? "", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).downloadProgress  (progress) in
        print(progress.fractionCompleted)

        DispatchQueue.main.async
            self.progressDownload.setProgress((Float(progress.fractionCompleted)), animated: true)
            let per = round((Float(progress.fractionCompleted)) * 100)
            self.lblDownloadPercent.text = "\(Int(per))%"
        
    .responseData  (response) in
        switch (response.result)
        case .success(_) :
            print(response)
            print(response.result.value!)
            print(response.result.description)

            if let data = response.result.value 
                do 
                    try data.write(to: currentVideoURL)
                    self.showToast(message: "File downloaded successfully")
                
                catch 
                    print("Something went wrong!")
                
            
        case .failure(let error) :
            print(response)
            if error._code == NSURLErrorNetworkConnectionLost 
                DispatchQueue.main.async 
                    super.showPopup(title: msgStruct.networkTitle, message: msgStruct.noInternet)
                
            
            else if error._code == NSURLErrorTimedOut 
                DispatchQueue.main.async 
                    super.showPopup(title: msgStruct.networkTitle, message: msgStruct.noInternet)
                
            
            else if error._code == NSURLErrorDownloadDecodingFailedMidStream 
                print("error",error.localizedDescription)
            
            break
        
    

else
    super.showPopup(title: msgStruct.networkTitle, message: msgStruct.noInternet)

【问题讨论】:

一个建议是将fractionCompleted 除以4,并且不要重置每个文件之间的进度条。如果文件大小变化很大,这并不完全正确,但这是一个简单的解决方案 【参考方案1】:

你可以这样做: 维护一个全局变量 - tatalPercentage 其他一些 swift 类。

  static let tatalPercentage = 0

tatalPercentage = tatalPercentage + Int(per/4)
self.lblDownloadPercent.text = "\(tatalPercentage) %"

【讨论】:

我已经根据从 alamofire 本身获得的分数完成值计算了 per。显示适当的百分比是相互矛盾的。请你能更多地探索它。谢谢 你试过了吗? 感谢您的帮助。我以同样的方式做,它工作正常。 太棒了!享受编码?

在swift 2中作为一批下载多个文件

】在swift2中作为一批下载多个文件【英文标题】:Downloadingmultiplefilesasonebatchinswift2【发布时间】:2016-05-1709:40:05【问题描述】:我正在尝试下载多个图像,结果是它一个一个地下载,有没有办法将多个文件作为一个下载?我想要... 查看详情

swift录制多个音频并将音频转换为mp3并合成多个mp3文件为一个文件

我的需求是可以录制多个文件,最后生成的文件格式为mp3形式,查了下各种资料,因为swift无法直接将音频录制为mp3格式,所以最后我采取的解决方案为先将每个单独的文件转为mp3,最后逐一合并形成一个mp3文件首先第一步录制... 查看详情

在 iOS 中使用 NSURLConnection 以串行顺序下载文件

】在iOS中使用NSURLConnection以串行顺序下载文件【英文标题】:DownloadingfilesinserialorderusingNSURLConnectioniniOS【发布时间】:2015-07-1313:56:24【问题描述】:我想按顺序下载3个文件。其中两个是txt文件,一个是.gz文件。我正在使用NSURLCon... 查看详情

无法在使用 Alamofire 下载的 PDFView IOS 中查看 PDF - SWIFT

】无法在使用Alamofire下载的PDFViewIOS中查看PDF-SWIFT【英文标题】:CannotviewPDFinPDFViewIOSdownloadedusingAlamofire-SWIFT【发布时间】:2018-03-1800:17:47【问题描述】:我正在尝试从服务器下载pdf文件并将其显示在ios的PDFView中。我相信我已经成... 查看详情

iOS + Swift,如何访问所有音乐文件 [关闭]

】iOS+Swift,如何访问所有音乐文件[关闭]【英文标题】:iOS+Swift,Howtoaccessallmusicfiles[closed]【发布时间】:2015-03-1906:16:03【问题描述】:我正在使用swift在iOS中制作应用程序。我想要做的是在iPhone存储上获取所有音乐文件,就像iTune... 查看详情

Swift将下载的文件放入文件夹[重复]

】Swift将下载的文件放入文件夹[重复]【英文标题】:Swiftputdowloadedfileintofolder[duplicate]【发布时间】:2016-09-2714:16:28【问题描述】:我想下载一个文件并将其放入已知路径。我搜索了,但我不明白我该怎么做。这是下载的代码:fu... 查看详情

swift:从文档目录加载多个文件

】swift:从文档目录加载多个文件【英文标题】:swift:Loadmultiplefilesfromdocumentsdirectory【发布时间】:2018-07-2608:04:28【问题描述】:我在文档目录中有许多文件的文件夹。在我的文件夹中,我有不同扩展名的文件(jpg、png、mp3、zip... 查看详情

列出设备iOS swift中的所有音频文件

】列出设备iOSswift中的所有音频文件【英文标题】:ListallaudiofilesindeviceiOSswift【发布时间】:2017-05-0407:04:26【问题描述】:我正在创建一个应用程序来列出设备中存储的所有音频文件类型(.mp3,.wav),我从***获得了一个示例代码... 查看详情

当我们尝试在 Python 中使用 pysftp 从 SFTP 串行下载 50 多个文件时,下载失败并显示“身份验证失败”?

】当我们尝试在Python中使用pysftp从SFTP串行下载50多个文件时,下载失败并显示“身份验证失败”?【英文标题】:Downloadfailswith"Authenticationfailed"whenwetrytodownload50+filesfromSFTPseriallyusingpysftpinPython?【发布时间】:2021-11-2100:46:5... 查看详情

swift如何在swift中使用nsurlsessiondownloadtask顺序下载多个文件(代码片段)

查看详情

iOS Swift 在后台下载大量小文件

】iOSSwift在后台下载大量小文件【英文标题】:iOSSwiftdownloadlotsofsmallfilesinbackground【发布时间】:2016-11-0314:21:59【问题描述】:在我的应用中,我需要下载具有以下要求的文件:下载大量(例如3000个)小PNG文件(例如5KB)一个一... 查看详情

下载的PDF文件小且无法打开 - Swift iOS

】下载的PDF文件小且无法打开-SwiftiOS【英文标题】:PDFfiledownloadedwithsmallsizeandcan\'tbeopened-SwiftiOS【发布时间】:2021-12-3012:05:50【问题描述】:我正在尝试使用来自API的链接下载pdf文件,但它总是以5KB的大小下载,并且文件总是损... 查看详情

在 Swift 中部分下载数据

】在Swift中部分下载数据【英文标题】:PartiallydownloadingdatainSwift【发布时间】:2017-09-0715:04:10【问题描述】:我正在尝试在Swift中开发下载加速器。它应该获取文件的大小并将其划分为n部分。然后它应该通过运行多个线程一次下... 查看详情

如何从 Flutter 中的 URL 下载文件并将其保存在 iOS 共享文件夹中?

】如何从Flutter中的URL下载文件并将其保存在iOS共享文件夹中?【英文标题】:HowtodownloadfilesfromURLinFlutterandsavetheminiOSsharedFolder?【发布时间】:2020-02-1410:45:20【问题描述】:我对Flutter很陌生,我需要以下步骤的解决方案:从url下... 查看详情

ios swift 动态更新 SSL 证书(.cer)文件

...2022-01-1719:02:39【问题描述】:动态需要更新。我可以从URL下载证书并将其保存到文档目录。funcdownloadFile(url:URL,completion:@escaping(String?,Error?)->Void)letdo 查看详情

如何使用 alamofire 将多个 PDF 文件上传到服务器? #Swift 4 #IOS [重复]

】如何使用alamofire将多个PDF文件上传到服务器?#Swift4#IOS[重复]【英文标题】:HowtouploadmultiplePDFfilestoserverusingalamofire?#Swift4#IOS[duplicate]【发布时间】:2020-01-1305:04:00【问题描述】:如何在swift4中使用第三方库将多个PDF文件上传到... 查看详情

将不同文件中的多个excel表导入python并将它们连接到一个数据框中

】将不同文件中的多个excel表导入python并将它们连接到一个数据框中【英文标题】:Importmultipleexcelsheetsfromdifferentfilesintopythonandconcatenatethemintoonedataframe【发布时间】:2020-04-2208:57:02【问题描述】:我正在尝试将来自不同Excel文件... 查看详情

使用 iOS 后台传输服务下载多个文件

】使用iOS后台传输服务下载多个文件【英文标题】:DownloadmultiplefilesusingiOSbackgroundtransferservice【发布时间】:2014-04-0315:57:40【问题描述】:这里的问题是:如何使用新的后台传输服务(包括应用程序被暂停的情况)一个一个下载... 查看详情