如何在Swift中使用Alamofire上传带参数的图像

Rez*_*_Rg 20 upload xcode swift alamofire

我正在用swift开发一个iPhone应用程序.我正在使用Alamofire框架来处理http请求.我Alamofire.request像这样用于POST,GET等:

Alamofire.request(.POST, myURL , parameters: ["a": "1", "b" : "2" ])
        .response { (request, response, data, error) in
}  
Run Code Online (Sandbox Code Playgroud)

Alamofire.upload用来将图像上传到服务器:

Alamofire.upload(.POST, uploadURL , fileURL)
Run Code Online (Sandbox Code Playgroud)

两者都很完美,但现在我想上传一个图像并发送一些参数,我的内容类型应该是multipart/form-data并且Alamofire.upload不接受参数.

有两个问题,更SO关于这一问题迅速,其中第一个没有使用Alamofire(真的,为什么不呢?),并在第二个,mattt(Alamofire开发)引用使用的编码参数.

我检查了他的例子,但仍然无法弄清楚如何做到这一点.

任何人都可以帮我解决这个问题吗?

谢谢!:)

ami*_*pta 23

您可以使用下面的Alamofire 3.0+代码

func uploadImageAndData(){
    //parameters
    let gender    = "M"
    let firstName = "firstName"
    let lastName  = "lastName"
    let dob       = "11-Jan-2000"
    let aboutme   = "aboutme"
    let token     = "token"

    var parameters = [String:AnyObject]()
    parameters = ["gender":gender,
                  "firstName":firstName,
                  "dob":dob,
                  "aboutme":about,
                  "token":token,
                  "lastName":lastName]

    let URL = "http://yourserviceurl/"
    let image = UIImage(named: "image.png")

    Alamofire.upload(.POST, URL, multipartFormData: {
        multipartFormData in

        if let imageData = UIImageJPEGRepresentation(image, 0.6) {
            multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png")
        }

        for (key, value) in parameters {
            multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
        }
    }, encodingCompletion: {
        encodingResult in

        switch encodingResult {
        case .Success(let upload, _, _):
            print("s")
            upload.responseJSON { 
                response in
                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization

                if let JSON = response.result.value {
                    print("JSON: \(JSON)")
                }
            }
        case .Failure(let encodingError):
            print(encodingError)
        }
    })
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*vin -2

要使用编码参数,请创建一个 ParameterEncoding 变量,为其分配编码类型(枚举的情况,包括 .JSON、.URL),然后将编码函数与 NSURLRequest 和参数一起使用。该函数返回一个包含两个元素的元组,第一个是生成的 NSURLRequest,第二个是生成的可能的 NSError。

以下是我如何将其用于项目中所需的自定义标头

 var parameterEncoding:ParameterEncoding!
    switch method {
        case .POST, .PUT :
            parameterEncoding = ParameterEncoding.JSON
        default :
            parameterEncoding = ParameterEncoding.URL
    }
    var alamoRequest = Alamofire.Manager.sharedInstance.request(parameterEncoding.encode(mutableURLRequest, parameters: parameters).0)
Run Code Online (Sandbox Code Playgroud)