Alamofire 4 upload with parameters

有些话、适合烂在心里 提交于 2019-11-26 09:11:39

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!