Progress of a Alamofire request

我的梦境 提交于 2019-11-28 07:45:27

问题


Will it be possible to show progress for

Alamofire.request(.POST, URL, parameters: parameter, encoding: .JSON)
 .responseJSON { response in
 // Do your stuff
}

I get my images/documents as a base64 string then I convert it as files in mobile

Can I show a progress bar with percentage?

I am using Alamofire, Swift 2


回答1:


The way you monitor progress in Alamofire is using the progress closure on a Request. More details on usage can be found in the README. While that example in the README demonstrates usage on a download request, it still works on a data request as well.

The one important note is that you do not always get perfect reporting back from the server for a data request. The reason is that the server does not always report an accurate content length before streaming the data. If the content length is unknown, the progress closure will be called, but the totalExpectedBytesToRead will always be -1.

In this situation, you can only report accurate progress if you know the approximate size of the data being downloaded. You could then use your approximate number in conjunction with the totalBytesRead value to compute an estimated download progress value.




回答2:


To make a download with progress for Swift 2.x users with Alamofire >= 3.0:

let url = "https://httpbin.org/stream/100" // this is for example..
let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)

Alamofire.download(.GET, url, parameters: params, encoding: ParameterEncoding.URL,destination:destination)
                .progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in
                    // This closure is NOT called on the main queue for performance
                    // reasons. To update your ui, dispatch to the main queue.         
                    dispatch_async(dispatch_get_main_queue()) {
                        // Here you can update your progress object
                        print("Total bytes read on main queue: \(totalBytesRead)")
                        print("Progress on main queue: \(Float(totalBytesRead) / Float(totalBytesExpectedToRead))")
                    }
                }
                .response { request, _, _, error in
                    print("\(request?.URL)")  // original URL request
                    if let error = error {
                        let httpError: NSError = error
                        let statusCode = httpError.code
                    } else { //no errors
                        let filePath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
                        print("File downloaded successfully: \(filePath)")
                    }
            }



回答3:


Alamofire 4.0 and Swift 4.x

func startDownload(audioUrl:String) -> Void {
    let fileUrl = self.getSaveFileUrl(fileName: audioUrl)
    let destination: DownloadRequest.DownloadFileDestination = { _, _ in
        return (fileUrl, [.removePreviousFile, .createIntermediateDirectories])
    }

    Alamofire.download(audioUrl, to:destination)
        .downloadProgress { (progress) in
            self.surahNameKana.text = (String)(progress.fractionCompleted)
        }
        .responseData { (data) in
            // at this stage , the downloaded data are already saved in fileUrl
            self.surahNameKana.text = "Completed!"
    }
}


来源:https://stackoverflow.com/questions/33827438/progress-of-a-alamofire-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!