我在Swift iOS中使用NSMutableURLRequest
进行多部分请求。如何获得服务器上已上传数据的进度?
目前,我正在使用以下代码:
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
var request = NSMutableURLRequest(URL: url, cachePolicy: cachePolicy, timeoutInterval: 30000)
request.HTTPMethod = "POST"
request.setValue(NSUserDefaults.standardUserDefaults().objectForKey("access-token") as? String, forHTTPHeaderField: "Authorization")
// set Content-Type in HTTP header
let boundary = generateBoundaryString()
var body = NSMutableData.alloc()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.HTTPBody = createBodyWithParameters(parameters, filePathKey: filePathKey, data: data, boundary: boundary, fileName:filename, jsonData: jsonData)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
println("error=\(error)")
failed(errorCode: error.code)
return
}else{
var error: NSError?
var json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error)
let parsedJson = JSON(json!)
completion(parsedJSON: parsedJson)
}
}
task.resume()
最佳答案
我有同样的问题。我正在使用AFNetworking。我发现没有使用dataTaskWithRequest
,而是需要将uploadTaskWithStreamedRequest
与回调方法progressCallback
一起使用。
if request != nil
{
let manager = AFURLSessionManager.init(sessionConfiguration: NSURLSessionConfiguration.defaultSessionConfiguration())
let uploadTask = manager.uploadTaskWithStreamedRequest(request,
progress:
{ (uploadProgress) -> Void in
dispatch_async(dispatch_get_main_queue())
{
progressCallback(progress: Float(uploadProgress.fractionCompleted))
}
},
completionHandler:
{ (data, response, error) -> Void in
if error != nil
{
DDLogSwift.error("There was an error uploading. Error: \(error)")
}
else
{
DDLogSwift.debug("Response: \(data)")
}
})
uploadTask.resume()
}
关于ios - 如何知道快速分段请求中的上传进度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32734786/