如何获得文件上传的进度?
// 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)")
}
我想添加上面的块,如何计算视频上传的预计时间。
答案 0 :(得分: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)
}
}
)
答案 1 :(得分:1)
您还可以在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
}