使用Alamofire参数数组上传多个文件

我有一组参数和图像数组,每一组参数都包含一个且只有一个image.my代码

let imgData = UIImageJPEGRepresentation(imageView.image!, 0.2)! Alamofire.upload(multipartFormData: { multipartFormData in multipartFormData.append(imgData, withName: "fileset",fileName: "file.jpg", mimeType: "image/jpg") for (key, value) in params { multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) } }, to:URLUpdateProfile, method:.post, headers:headers) { (result) in switch result { case .success(let upload, _, _): upload.uploadProgress(closure: { (progress) in print("Upload Progress: \(progress.fractionCompleted)") }) upload.responseJSON { response in print(response.result.value) } case .failure(let encodingError): print(encodingError) } } 

与此代码,我可以上传一个图像以及一个参数。但我想要发送数组中的参数和数组图像太。是上传数组的图像数组的方式? 如果是的话如何跟踪图像和参数?

您可以在Operation上传每个图像及其参数。 你的Operation应该是这样的:

 class UploadImageOperation: Operation { private var image: UIImage init(withImage: UIImage) { super.init() image = withImage } override func main() { let imgData = UIImageJPEGRepresentation(image, 0.2)! Alamofire.upload(multipartFormData: { multipartFormData in multipartFormData.append(imgData, withName: "fileset",fileName: "file.jpg", mimeType: "image/jpg") for (key, value) in params { multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) } }, to:URLUpdateProfile, method:.post, headers:headers) { (result) in switch result { case .success(let upload, _, _): upload.uploadProgress(closure: { (progress) in print("Upload Progress: \(progress.fractionCompleted)") }) upload.responseJSON { response in print(response.result.value) } case .failure(let encodingError): print(encodingError) } } } } 

然后你创build操作并将它们添加到队列中,如下所示:

 let opQueue = OperationQueue() opQueue.name = "imageUploadQueue" opQueue.maxConcurrentOperationCount = 5 //number of images you want to be uploaded simultaneously opQueue.qualityOfService = .background for image in arrayOfImages { let uploadImageOperation = UploadImageOperation(withImage: image) opQueue.addOperation(uploadImageOperation) }