Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用multipartFormData上载图像时,Alamofire请求正文为零_Swift_Alamofire - Fatal编程技术网

Swift 使用multipartFormData上载图像时,Alamofire请求正文为零

Swift 使用multipartFormData上载图像时,Alamofire请求正文为零,swift,alamofire,Swift,Alamofire,我似乎有一个关于图像上传和使用Alamofire传递参数的问题。我有一个非常简单的多部分数据函数,如下所示: sessionManager.upload(multipartFormData: { (multipartFormData) in for (key, value) in parameters { print("\(value)") multipartFormData.append("\(value)".data(using

我似乎有一个关于图像上传和使用Alamofire传递参数的问题。我有一个非常简单的多部分数据函数,如下所示:

sessionManager.upload(multipartFormData: { (multipartFormData) in
        for (key, value) in parameters {
            print("\(value)")
            multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
        }
        multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "document", mimeType: "image/png")

    }, to: baseURL + "/documents", encodingCompletion: { (result) in
        switch result{
            case .success(let upload, _, _):
                upload.validate().responseJSON { response in
                    print("Succesfully uploaded")

                }
            case .failure(let error):
                print("Error in upload: \(error.localizedDescription)")

            }
    })

我有OAuth2Handler,我已经为头和授权实现了它,它可以处理所有其他请求。我也尝试过在没有包装器的情况下直接使用Alamofire对象来实现这一点,但仍然没有成功。当我检查请求时,我注意到httpBody始终为nil,这与我从服务器得到的错误相对应,并且消息说我没有传递所需的参数

这对我有效Swift 4

func callPostApiImage(api:String, parameters:[String:AnyObject]?,image:UIImage,Name:String, mime_type:String = "image/jpg",  complition:@escaping (AnyObject)->Void){

    // Encode Data
    let base64EncodedString = toBase64EncodedString(toJsonString(parameters: parameters!))

    let File_name = "image_" + String(arc4random()) + ".jpg"

    Alamofire.upload(multipartFormData: { (multipartFormData) in

        multipartFormData.append(UIImageJPEGRepresentation(image, 0.5)!, withName: Name, fileName: File_name, mimeType: mime_type)
        multipartFormData.append(base64EncodedString.data(using: String.Encoding.utf8)!, withName: "jsondata")

    }, to:api){ (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.localizedDescription)
            break
        }
    }
}

// Base64EncodedString
func toBase64EncodedString(_ jsonString : String) -> String
{
    let utf8str = jsonString.data(using: .utf8)

    let base64Encoded = utf8str?.base64EncodedString(options: [])

    return base64Encoded!
}

@瓦迪姆夫。抱歉,亲爱的,回复太晚,请检查更新的答案,我已经添加了toBase64EncodedString功能,如果您还有其他问题,请随时在这里发表评论:)