如何使用 Alamofire 在多部分表单数据中追加数组?

2023-11-29

I am uploading image with multipart form data using Alamofire but getting some problem while i am passing an array as parameter. This is postman request

根据要求,我需要将所有数据传递到信件中。 这就是我的做法。

    let data = try! JSONSerialization.data(withJSONObject: arrSelectedRecipientsID, options: .prettyPrinted)
    let jsonString = String(data: data, encoding: .utf8)!

    let paramArr : [String : Any] = [
        "message" : txtvwMessage.text!,
        "status": "draft",
        "recipient_ids": jsonString
    ]

    let parameter  : [String : Any] = ["letter" : paramArr]

    let accesstoken = Utilities.retriveValueFromDefault(forKey: UDKey.kUserAuthentication_Token) as String
    let client = Utilities.retriveValueFromDefault(forKey: UDKey.kUserClient) as String
    let uid = Utilities.retriveValueFromDefault(forKey: UDKey.kUserUID) as String


    let headersInfo : HTTPHeaders = [ "Content-Type" : "multipart/form-data",
                                      "Accept" : "application/json",
                                      "access-token" : accesstoken,
                                      "client" : client,
                                      "uid" : uid
    ]


    fileUploadWithParameter(Constant.ServerAPI.kPostLetters, images: letterImage, header: headersInfo, parameters: parameter, success: { (response) in

        print(response)
    }) { (progress) in


    }

这是 Alamofire 请求方法。

func fileUploadWithParameter(_ url: String,images:NSMutableArray,header : [String : String], parameters: [String:Any], success:@escaping (NSDictionary)->(),progressHandler:@escaping(_ progress: Double)->Void) {

    Alamofire.upload(multipartFormData: { multipartFormData in
        for i in 0..<images.count {

            let rotatedImage = images[i] as! UIImage

            if let imgData = UIImageJPEGRepresentation(rotatedImage, 0.8) {
                multipartFormData.append(imgData, withName: "letter[photos]",fileName: "0\(i).jpg", mimeType: "image/jpg")
            }
        }
        for (key, value) in parameters {

            //multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key )
            let paramsData:Data = NSKeyedArchiver.archivedData(withRootObject: value)
            multipartFormData.append(paramsData, withName: key)

        }

    }, to: url,
       method:.post,
       headers:header) { (result) in
        print("\n\n\nRequest URL :- \(url)\nParameters :- \(parameters)")
        switch result {
        case .success(let upload, _, _):

            upload.responseJSON { response in

                if response.error != nil {
                    print("Error :- \((response.error?.localizedDescription)!)\n\n\n")
                }
                if let jsonDict = response.result.value as? NSDictionary {
                    print("Response :- \(jsonDict)\n\n\n")

                } else {
                    print("Error :- \(Constant.ErrorMessage.kCommanError)\n\n\n")

                }
            }
        case .failure(let encodingError):
            print("Error :- \(encodingError.localizedDescription)\n\n\n")

        }

    }
}

邮递员工作得很好,所以有人可以帮助我,我做错了什么。

预期的 API 正确的 json 应该是

 {
   "letter":
          {
            "message": "Type your message here...!!!",
            "recipient_ids": [183, 184],
            "status": "draft"
          }
 }

API 在 ruby​​ on Rails 中,它说我正在发送字符串。请帮我找出问题所在。


只需要更改给定的代码行:

  for (key, value) in parameters {
            if key == "letter" {
                let arrData =  try! JSONSerialization.data(withJSONObject: value, options: .prettyPrinted)
                multipartFormData.append(arrData, withName: key as String)
            }
            else {
                multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
            }
        }

休息也会一样。

您的方法以更新的形式:

 func fileUploadWithParameter(_ url: String,images:NSMutableArray,header : [String : String], parameters: [String:Any], success:@escaping (NSDictionary)->(),progressHandler:@escaping(_ progress: Double)->Void) {
    
    Alamofire.upload(multipartFormData: { multipartFormData in
        for i in 0..<images.count {
            
            let rotatedImage = images[i] as! UIImage
            
            if let imgData = UIImageJPEGRepresentation(rotatedImage, 0.8) {
                multipartFormData.append(imgData, withName: "letter[photos]",fileName: "0\(i).jpg", mimeType: "image/jpg")
            }
        }
        for (key, value) in parameters {
            
            //multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key )
            let paramsData:Data = NSKeyedArchiver.archivedData(withRootObject: value)
            multipartFormData.append(paramsData, withName: key)
            
        }
        
        for (key, value) in parameters {
            if key == "letter" {
                let arrData =  try! JSONSerialization.data(withJSONObject: value, options: .prettyPrinted)
                multipartFormData.append(arrData, withName: key as String)
            }
            else {
                multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
            }
        }
        
    }, to: url,
       method:.post,
       headers:header) { (result) in
        print("\n\n\nRequest URL :- \(url)\nParameters :- \(parameters)")
        switch result {
        case .success(let upload, _, _):
            
            upload.responseJSON { response in
                
                if response.error != nil {
                    print("Error :- \((response.error?.localizedDescription)!)\n\n\n")
                }
                if let jsonDict = response.result.value as? NSDictionary {
                    print("Response :- \(jsonDict)\n\n\n")
                    
                } else {
                    //print("Error :- \(Constant.ErrorMessage.kCommanError)\n\n\n")
                    print("Errfdc")
                }
            }
        case .failure(let encodingError):
            print("Error :- \(encodingError.localizedDescription)\n\n\n")
            
        }
        
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Alamofire 在多部分表单数据中追加数组? 的相关文章

随机推荐