Je fais ce qui suit pour télécharger un fichier PNG avec des paramètres:
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(UIImagePNGRepresentation(tempImage!)!, withName: "file", fileName: "picture.png", mimeType: "image/png")
// Send parameters
multipartFormData.append((UserDefaults.standard.value(forKey: Email) as! String).data(using: .utf8)!, withName: "email")
multipartFormData.append("png".data(using: .utf8)!, withName: "type")
},
to: "user/picture",
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint("SUCCESS RESPONSE: \(response)")
}
case .failure(let encodingError):
self.removeSpinnerFromView()
print("ERROR RESPONSE: \(encodingError)")
}
}
)
Le problème est que sur mon serveur, je ne vois pas les champs de formulaire email
et type
. J'ai suivi des exemples publiés en ligne pour cela. Y a-t-il quelque chose que je devrais faire différemment pour cela?
MODIFIER
Si je retire la pièce où je l'ai mise:
multipartFormData.append(UIImagePNGRepresentation(tempImage!)!, withName: "file", fileName: "picture.png", mimeType: "image/png")
PUIS les paramètres sont inclus. Sinon non, je pense que c'est un bug dans Alamofire 4.0.1.
Ça marche bien de mon côté.
J'utilise le code suivant:
let parameters = [
"file_name": "Swift_file.jpeg"
]
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 1)!, withName: "photo_path", fileName: "Swift_file.jpeg", mimeType: "image/jpeg")
for (key, value) in parameters {
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
}
}, to:"http://sample.com/upload_img.php")
{ (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (progress) in
//Print progress
})
upload.responseJSON { response in
//print response.result
}
case .failure(let encodingError):
//print encodingError.description
}
}
Si votre valeur est de type Any, vous pouvez la modifier comme ceci
for (key, value) in params {
let paramsData:Data = NSKeyedArchiver.archivedData(withRootObject: value)
formData.append(paramsData, withName: key)
}