【发布时间】:2017-03-13 14:34:52
【问题描述】:
我想使用 UIProgressView 跟踪通过流请求上传的视频的进度。不幸的是,我没有使用 Alamofire,所以我不确定 URLSession 是否有这个能力。以下是我的应用程序中的相关代码。
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 正确设置 UIProgressView 以指示上传完成,但是,didSendBodyData 通过uploadProgress 计算返回大于 1 的值。
这是我第一次使用流请求,所以我希望我只是掩盖了一些你可以帮助指出的东西。这是我的请求的结构以及供参考。
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()
非常感谢您的意见和帮助。
【问题讨论】:
标签: swift3 nsurlsession uiprogressview