Je souhaite suivre la progression des vidéos mises en ligne via une requête de flux avec UIProgressView. Malheureusement, je n'utilise pas Alamofire, donc je ne suis pas sûr si URLSession a cette capacité. Ci-dessous le code pertinent de mon application.Télécharger des demandes de diffusion et UIProgressView, Swift 3
func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
let uploadProgress:Float = Float(totalBytesSent)/Float(totalBytesExpectedToSend)
let uploadCell = contentTableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! NewContentCell
uploadCell.uploadProgressView.progress = uploadProgress
}
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
let uploadCell = contentTableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! NewContentCell
uploadCell.uploadProgressView.progress = 1.0
}
didCompleteWithError
définit correctement le UIProgressView pour indiquer que le téléchargement est terminé, cependant, est didSendBodyData
affichant des valeurs supérieures à 1 par le calcul uploadProgress
.
C'est la première fois que j'utilise une requête de flux, alors j'espère avoir simplement passé sous silence quelque chose que vous pourriez nous aider à souligner. Voici la structure de ma demande aussi pour référence.
let request = NSMutableURLRequest(url: NSURL(string: "\(requestUrl)")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBodyStream = InputStream(data: body as Data)
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: self, delegateQueue: OperationQueue.main)
let dataTask = session.uploadTask(withStreamedRequest: request as URLRequest)
dataTask.resume()
Merci beaucoup pour votre contribution et votre aide.
comment vous diffusez avez-vous suivre sa progression? 'func urlSession (_ session: URLSession, tâche: URLSessionTask, didSendBodyData octetsSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)' n'est jamais appelé dans les tâches de flux! – Martin
Oups. J'ai juste oublié d'appeler 'streamTask.resume()' – Martin