我想使用alamofire swift 5将图像上传到多部分表单数据

时间:2019-11-30 20:32:31

标签: ios swift

我想将png图片上传到类似postman的URL,我使用过postman postman screenshot

我使用此功能使用Alamofire使用post方法将png图像上传到url 这是上载功能,但返回错误代码500内部服务器错误,尽管在邮递员中成功返回代码200

 static func updateProfileImage(image : UIImage , result : @escaping()->()) {

        if let user = UserDefaults.standard.string(forKey: "mail") , let imgData = image.pngData(){
            Alamofire.upload(
                multipartFormData: { multipartFormData in

                multipartFormData.append("form-data".data(using: .utf8 ,allowLossyConversion: false)!, withName: "Content-Disposition")
                //multipartFormData.append("name".data(using: .utf8 ,allowLossyConversion: false)!, withName: "fileUpload")
        multipartFormData.append(imgData, withName: "fileUpload", mimeType: "image/png")
        },
                to: URLs.profileImage+user,method: .post,
                encodingCompletion: { encodingResult in
                    switch encodingResult {
                    case .success(let upload, _, _):
                        upload.response { response in
                            print(response)
                        }
                    case .failure( _):
                        print("error")
                    }
                }
            )
        }

3 个答案:

答案 0 :(得分:0)

我下面有多部分数据请求的代码,希望对您有帮助。

    Alamofire.upload( multipartFormData: { multipartFormData in

        // parameters is method arguments in my webs ervice call method
        for (key, value) in parameters {
            if let data = (value as! String).data(using: .utf8) {
                multipartFormData.append(data, withName: key)
            }
        }

        let imageData = image?.jpegData(compressionQuality: 0.5)

        multipartFormData.append(imageData!, withName: "profile_image", fileName: "profileImage", mimeType: "image/jpeg")

    // getURL(.addProfile) will create url, method from my structure
    // getHeaders() will return required header from that method
    }, to: getURL(.addProfile), headers: getHeaders(), encodingCompletion: { encodingResult in

        switch encodingResult {

        case .success(let upload, _, _):

            upload.response(completionHandler: { (defaultDataResponse) in

                guard let httpResponse = defaultDataResponse.response else {
                    completion(nil, defaultDataResponse.error)
                    return
                }

                if httpResponse.statusCode == 200 {

                    // Success Code

                } else {
                    // Failed code
                }
            })

        case .failure(let encodingError):

            // Failed code.
        }
    })

答案 1 :(得分:0)

尝试一下

func generateBoundary() -> String {
    return "Boundary-\(NSUUID().uuidString)"
}

//使用必需的身份验证设置标题

let boundary = generateBoundary()

let headers = ["content-type": "multipart/form-data; boundary=\(boundary)",
              "Content-Type": "application/json",
              "cache-control": "no-cache"]

//Api Call

Alamofire.upload(multipartFormData:{ multipartFormData in

            if let image = imageData {
                multipartFormData.append(image, withName: "<param_key>", fileName: objIdentityDetails.fileName ?? (String(Date().timeIntervalSince1970) + ".jpeg"), mimeType: "image/jpeg")
            }
            for (key, value) in parameters {
                multipartFormData.append(value?.data(using: String.Encoding.utf8) ?? Data(), withName: key)
            }},
                         usingThreshold:UInt64.init(),
                         to: try! <URL>,
                         method: .post,
                         headers: headers,
                         encodingCompletion: { encodingResult in
                            switch encodingResult {
                            case .success(let upload, _, _):
                                upload.responseObject { (response: <model>) in
                                    switch response.result {
                                    case .failure (let error):
                                        //Error 
                                    case .success (let responseObject):
                                       //response
                                    }
                                }
                            case .failure(let encodingError):
                                //Error 
                            }
        })

答案 2 :(得分:-1)

您可以使用以下代码上传:


Alamofire.upload(multipartFormData:{ multipartFormData in  multipartFormData.append(img, withName: "image", fileName: "image.png", mimeType: "image/png")  },

“ img”-是您的图像数据和 “ withName”-您在邮递员中的名字是& “ fileName”-您要上传的图片名称