问题
I\'m doing the below to upload a PNG file with parameters:
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)\")
}
}
)
Problem is that on my server I don\'t see the email
and type
form fields. I followed examples posted online for this. Is there anything I should do differently for this?
EDIT
If I remove the part where I put:
multipartFormData.append(UIImagePNGRepresentation(tempImage!)!, withName: \"file\", fileName: \"picture.png\", mimeType: \"image/png\")
THEN the parameters are included. Otherwise not, I think this is a bug in Alamofire 4.0.1.
回答1:
Its working fine on my side.
I'm using following code:
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
}
}
回答2:
If your value is of type Any, you can change it like this
for (key, value) in params {
let paramsData:Data = NSKeyedArchiver.archivedData(withRootObject: value)
formData.append(paramsData, withName: key)
}
来源:https://stackoverflow.com/questions/39809867/alamofire-4-upload-with-parameters