首页 > 解决方案 > 我想使用 alamofire swift 5 将图像上传到多部分表单数据

问题描述

我想像邮递员一样将png图像上传到URL,我使用邮递员 邮递员截图

我使用此功能使用 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")
                    }
                }
            )
        }

标签: iosswift

解决方案


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

    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.
        }
    })

推荐阅读