2016-08-11 31 views
1

如何获得文件上传的进度?使用Alamofire向文件上传添加进度

// import Alamofire 
    func uploadWithAlamofire() { 
    let image = UIImage(named: "myImage")! 

    // define parameters 
    let parameters = [ 
     "hometown": "yalikavak", 
     "living": "istanbul" 
    ] 

    // Begin upload 
    Alamofire.upload(.POST, "upload_url", 
     // define your headers here 
     headers: ["Authorization": "auth_token"], 
     multipartFormData: { multipartFormData in 

     // import image to request 
     if let imageData = UIImageJPEGRepresentation(image, 1) { 
      multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "myImage.png", mimeType: "image/png") 
     } 

     // import parameters 
     for (key, value) in parameters { 
      multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } 
     }, // you can customise Threshold if you wish. This is the alamofire's default value 
     encodingMemoryThreshold: Manager.MultipartFormDataEncodingMemoryThreshold, 
     encodingCompletion: { encodingResult in 
     switch encodingResult { 
     case .Success(let upload, _, _): 
      upload.responseJSON { response in 
      debugPrint(response) 
      } 
     case .Failure(let encodingError): 
      print(encodingError) 
     } 
    }) 
    } 

我知道类似于我必须添加进度块,但不知道哪里可以添加该进度块。

.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in 
     println("\(totalBytesWritten)/\(totalBytesExpectedToWrite)") 
    } 

我想添加上面的块,如何计算视频上传的估计时间。

回答

2

,你可以这样做:

Alamofire.upload(
    .POST, 
    URLString: "http://httpbin.org/post", 
    multipartFormData: { multipartFormData in 
     multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "unicorn") 
     multipartFormData.appendBodyPart(fileURL: rainbowImageURL, name: "rainbow") 
    }, 
    encodingCompletion: { encodingResult in 
     switch encodingResult { 
     case .Success(let upload, _, _): 
      upload.progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in 

      let progress: Float = Float(totalBytesRead)/Float(totalBytesExpectedToRead) // you can give this progress to progressbar progress 

       let value = Int(progress * 100) // this is the percentage of the video uploading 


       print(totalBytesRead) 

      } 
      upload.responseJSON { request, response, result in 
       debugPrint(result) 
      } 
     case .Failure(let encodingError): 
      print(encodingError) 
     } 
    } 
) 
+0

如何在uitableviewCell中显示上传进度? –

0

您也可以使用Alamofire 上传方法的其他版本,并且有进步。

let request = Alamofire.upload(.POST, "upload_url", headers: ["Authorization": "auth_token"], data: imageData!) 


request.responseJSON { (response: Response<AnyObject, NSError>) in 
    switch response.result { 
     case let .Success(result): 
      // do something with data 
      print(result) 
     case let .Failure(error): 
      // Error occurred 
      print(error) 
    } 
} 

request.progress { (bytesWritten: Int64, totalBytesWritten: Int64, totalExpectedBytesToWritten: Int64) in 

    let uploadProgress = Float(totalBytesWritten)/Float(totalExpectedBytesToWritten) 
    // Keep track of progress 
}