Swift2 Alamofire-如何通过多部分上传实现进度和完成关闭
我设法上传了包含多部分表单数据的文件Alamofire upload:Swift2 Alamofire-如何通过多部分上传实现进度和完成关闭,swift2,multipartform-data,alamofire,Swift2,Multipartform Data,Alamofire,我设法上传了包含多部分表单数据的文件Alamofire upload: Alamofire.upload(.POST, "api.myservice.com", headers: myheaders, multipartFormData: { (multipartFormData:MultipartFormData) -> Void in multipartFormData.appendBodyPart(data: json, name: "metadata", mimeType
Alamofire.upload(.POST, "api.myservice.com", headers: myheaders, multipartFormData: { (multipartFormData:MultipartFormData) -> Void in
multipartFormData.appendBodyPart(data: json, name: "metadata", mimeType: "application/json")
multipartFormData.appendBodyPart(data: self.data, name: "document", fileName: "photo.png", mimeType: "image/png")
}, encodingMemoryThreshold: 10 * 1024 * 1024) { (result:Manager.MultipartFormDataEncodingResult) -> Void in
}
但我看不到跟踪上传进度的方法,在上传完成(或失败)后调用完成块。有没有办法在阿拉莫菲尔做到这一点
注意:我知道随进度上传是可能的,但我正在专门研究多部分表单数据。以下是一种完成、失败和进度关闭的方法(感谢我的同事向我指出解决方案):
公认的答案很好。这一个也包括参数:
let image = UIImage(named: "big.jpg")!
let imageData = UIImageJPEGRepresentation(image, 1)
let coupon = textBox?.text ?? "NO coupon"
let uploadUrl = "http://example.com/upload.php"
// define parameters
let parameters : [String: String] = ["one":"some param", "two":"some other param"]
Alamofire.upload(.POST, uploadUrl, headers: nil,
multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(data: imageData!, name: "cannotBeBlank", fileName: "image.zip", mimeType: "image/png")
// import parameters
for (key, value) in parameters {
multipartFormData.appendBodyPart(data: value.data!, name: key)
}
}, encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
print("1) \(bytesWritten) 2) \(totalBytesWritten) 3) \(totalBytesExpectedToWrite)")
// This closure is NOT called on the main queue for performance
// reasons. To update your ui, dispatch to the main queue.
dispatch_async(dispatch_get_main_queue()) {
print("Total bytes written on main queue: \(totalBytesWritten)")
}
}
upload.responseData(self.handleResponse)
case .Failure:
self.handleError()
}
})
很高兴听到这个消息。希望它不会在Swift 3中突破太多!
let image = UIImage(named: "big.jpg")!
let imageData = UIImageJPEGRepresentation(image, 1)
let coupon = textBox?.text ?? "NO coupon"
let uploadUrl = "http://example.com/upload.php"
// define parameters
let parameters : [String: String] = ["one":"some param", "two":"some other param"]
Alamofire.upload(.POST, uploadUrl, headers: nil,
multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(data: imageData!, name: "cannotBeBlank", fileName: "image.zip", mimeType: "image/png")
// import parameters
for (key, value) in parameters {
multipartFormData.appendBodyPart(data: value.data!, name: key)
}
}, encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
print("1) \(bytesWritten) 2) \(totalBytesWritten) 3) \(totalBytesExpectedToWrite)")
// This closure is NOT called on the main queue for performance
// reasons. To update your ui, dispatch to the main queue.
dispatch_async(dispatch_get_main_queue()) {
print("Total bytes written on main queue: \(totalBytesWritten)")
}
}
upload.responseData(self.handleResponse)
case .Failure:
self.handleError()
}
})