So I'm just trying to send an image directly to S3, as instructed. But because of Swift versioning, I'm getting errors related to how it's written. I've tried to re-construct it parameter by parameter, but it seems to still return "Ambiguous reference to member 'upload(::headers:file:)'"
I'm using Swift 2.3 in the newest Xcode version with Alamofire 3.5
Alamofire.upload(.POST, json["url"], multipartFormData: { (multipartFormData) in
if let key: String = json["s3"]["form-data"]["key"].string {
multipartFormData.appendBodyPart(data: key.dataUsingEncoding(NSUTF8StringEncoding)!, name: "key")
}
if let acl: String = json["s3"]["form-data"]["acl"].string {
multipartFormData.appendBodyPart(data: acl.dataUsingEncoding(NSUTF8StringEncoding)!, name: "acl")
}
if let signature = json["s3"]["form-data"]["signature"].string {
multipartFormData.appendBodyPart(data: signature.dataUsingEncoding(NSUTF8StringEncoding)!, name: "signature")
}
if let AWSAccessKeyId = json["s3"]["form-data"]["AWSAccessKeyId"].string {
multipartFormData.appendBodyPart(data: AWSAccessKeyId.dataUsingEncoding(NSUTF8StringEncoding)!, name: "AWSAccessKeyId")
}
if let policy = json["s3"]["form-data"]["policy"].string {
multipartFormData.appendBodyPart(data: policy.dataUsingEncoding(NSUTF8StringEncoding)!, name: "policy")
}
if let success_action_status = json["s3"]["form-data"]["success_action_status"].string {
multipartFormData.appendBodyPart(data: success_action_status.dataUsingEncoding(NSUTF8StringEncoding)!, name: "success_action_status")
}
multipartFormData.appendBodyPart(data: imageData, name: "file", mimeType: "image/jpeg")
}) { (encodingResult) in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
if let statusCode = response.response?.statusCode {
if statusCode == 201 {
break
}
}
}
case .Failure(let encodingError):
break
}
}
upload()
was overloaded by AlamoFire.
You mention upload(::headers:file:)
, but you're trying to use something closer to upload(method::headers:multipartFormData:encodingMemoryThreshold:encodingCompletion:)
So you can attempt to be more explicit about the parameters.
guard let urlString = json["url"] as? URLStringConvertible else {
return
}
Alamofire.upload(.POST, urlString, headers: nil, multipartFormData: { (multipartFormData) in
...
}, encodingMemoryThreshold: Manager.MultipartFormDataEncodingMemoryThreshold) { (encodingResult) in
...