alamofire multipartformdata使用urlrequest

时间:2017-07-13 02:40:49

标签: ios swift upload alamofire patch

我想使用Alamo fire multipart表单数据使用请求,例如,我使用上传API

let profile = self.photoView.imageView?.image

    let parameters : [String:String] = [
        "homePageUrl": webURLField.text!,
        "nickName": nickNameField.text!,
        "selfIntro": introField.text!,
        ]

    let uri = Constants.APIURL.changeProfile
    let fileName = "\(nickNameField.text!).jpg"

    Alamofire.upload(multipartFormData: { (multipartFormData) in
         if let imageData = UIImageJPEGRepresentation(profile!, 1.0) {
            multipartFormData.append(imageData, withName: "profile", fileName: fileName, mimeType: "image/jpg")
        }

        for ( key, value ) in parameters {
            multipartFormData.append(value.data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: key)
        }

    }, usingThreshold: UInt64.init(), to: uri, method: .patch, headers: Constants.VyrlAPIConstants.getHeader(), encodingCompletion:
        {
            encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):

                upload.uploadProgress(closure: { (progress) in
                 })

                upload.responseString { response in
                    if ((response.response?.statusCode)! == 200){
                        self.navigationController?.popViewController(animated: true)                            
                    }
                }
            case .failure(let encodingError):
                print(encodingError.localizedDescription)
            }
    })

此代码从服务器发送400响应 log is。

  

PATCH' http://blablabla.com:8080 / users / profile':

     

内容类型:multipart / form-data;   boundary = alamofire.boundary.53a2e440bad1fabd X-Device:ios   X-APP-Version:1.0.0 Accept-Language:ko-kr 400   ' HTTP://blablabla.com:8080 /用户/简档' [0.0976 s]:   X-Application-Context:应用程序:dev连接:关闭   转移编码:身份日期:星期四,2017年7月13日01:57:41 GMT

     

服务器想要接收   http://blablabla.com:8080/users/profile?nickName=abcd&selfIntro=hi%20my%20name%20is ..   服务器日志是..(成功200代码)

     

curl -X PATCH --header' Content-Type:multipart / form-data' --header   '接受: / ' --header' X-APP-Version:1.0.0' --Hader' X-Device:ios'   --header' Accept-Language:ko-KR' {"输入":" formData"}' http://blablabla.com:8080/users/profile?nickName=abcd&selfIntro=hi%20my% 20name%图20是.. '

当然,我想附加?nicName = abcd 使用multiformpart数据

如何使用alamofire代码?

3 个答案:

答案 0 :(得分:1)

请尝试这个,它适用于我的图片上传

 var parameters = [String:AnyObject]()


    let profile = self.photoView.imageView?.image

    parameters = ["homePageUrl": webURLField.text as AnyObject,
                  "nickName": nickNameField.text as AnyObject,
                  "selfIntro": introField.text as AnyObject]


    let imgData = UIImageJPEGRepresentation(profile!, 0.2)!

    let uri = Constants.APIURL.changeProfile
    let fileName = "\(nickNameField.text!).jpg"


    Alamofire.upload(multipartFormData:{ multipartFormData in
        multipartFormData.append(imgData, withName: "profile",fileName: fileName, mimeType: "image/jpg")
        for (key, value) in parameters {
            multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
        }
    },
                     usingThreshold:UInt64.init(),
                     to:uri,
                     method:.post,
                     headers:Constants.VyrlAPIConstants.getHeader(),
                     encodingCompletion: { encodingResult in
                        switch encodingResult {
                        case .success(let upload, _, _):
                            upload.responseJSON { response in
                                 print(response.result.value)
                            }
                        case .failure(let encodingError):
                            print(encodingError)
                        }
    })

答案 1 :(得分:0)

如果不起作用,那么使用这样的参数制作url。

 Alamofire.upload(multipartFormData:{ multipartFormData in
        multipartFormData.append(imgData, withName: "profile",fileName: fileName, mimeType: "image/jpg")},
                     usingThreshold:UInt64.init(),
                     to:uri + "?" +nickNameField.text! +"?"+ webURLField.text!+"?"+introField.text!,
                     method:.post,
                     headers:Constants.VyrlAPIConstants.getHeader(),
                     encodingCompletion: { encodingResult in
                        switch encodingResult {
                        case .success(let upload, _, _):
                            upload.responseJSON { response in
                                 print(response.result.value)
                            }
                        case .failure(let encodingError):
                            print(encodingError)
                        }
    })

答案 2 :(得分:0)

在Swift 3 Alamofire 4中

这是参考的演示代码

Alamofire.upload(multipartFormData: { (multipartFormData) in
        multipartFormData.append(UIImageJPEGRepresentation(self.Imgprofile.image!, 1)!, withName: "Prescription", fileName: "Profile_Image.jpeg", mimeType: "image/jpeg")
    }, to:" Your URL here ")
    { (result) in
        switch result {
        case .success(let upload, _, _):
            print(result)

            upload.uploadProgress(closure: { (progress) in
                print(progress)
            })

            upload.responseJSON { response in
                //print response.result
                print(response);
            }

        case .failure(let encodingError):
            print(encodingError);
        }
    }
}

希望这应该有效

由于