我在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/

10-10 23:40
查看更多