首页 > 解决方案 > 无法在 Swift 中使用 POST 方法 multipart/form-data 上传图像和添加参数

问题描述

以下是此 API 的 URL 要求:http: //itaag-env-1.ap-south-1.elasticbeanstalk.com/editprofile/

在此处输入图像描述

根据这个答案Upload image with multipart form-data iOS in Swift

我试过下面的代码,但我无法添加parameters到 POST 请求,也无法调用uploadImageviewdidload 中的方法

这是代码:

 func uploadImage(paramName: String, fileName: String, image: UIImage) {

    let url = URL(string: "http://itaag-env-1.ap-south-1.elasticbeanstalk.com/editprofile/")

    let boundary = UUID().uuidString

    let deviceId: String = "HardcodeDEVICEIDforiTaag222"
    let headers = ["deviceid": "deviceId","userType": "personal","key": "5fe42fb3b54543a0bab5667cf96526f8"]

    let parameters: [String: Any] = ["firstName":"Satish", "lastName":"Madhavarapu","gender":"male", "ageGroup":"40-50"]
    let session = URLSession.shared

    var urlRequest = URLRequest(url: url!)
    urlRequest.httpMethod = "POST"
    urlRequest.allHTTPHeaderFields = headers as! [String : String]

    // Set Content-Type Header to multipart/form-data, this is equivalent to submitting form data with file upload in a web browser
    // And the boundary is also set here
    urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

    var data = Data()

    // Add the image data to the raw http request data
    data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
    data.append("Content-Disposition: form-data; name=\"\(paramName)\"; filename=\"\(fileName)\"\r\n".data(using: .utf8)!)
    data.append("Content-Type: image/png\r\n\r\n".data(using: .utf8)!)
    data.append(image.pngData()!)

    data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)

    // Send a POST request to the URL, with the data we created earlier
    session.uploadTask(with: urlRequest, from: data, completionHandler: { responseData, response, error in
        if error == nil {
            let jsonData = try? JSONSerialization.jsonObject(with: responseData!, options: .allowFragments)
            if let json = jsonData as? [String: Any] {
                print(json)
            }
        }
    }).resume()
}

在上面的代码中,我无法将参数添加let parameters: [String: Any] = ["firstName":"Satish", "lastName":"Madhavarapu","gender":"male", "ageGroup":"40-50"]urlRequest

以及如何调用uploadImageviewDidLoad

请帮我写代码

标签: jsonswiftpostmultipartform-data

解决方案


推荐阅读