【问题标题】:multipart form data request in alamofire in swift4?swift4中alamofire中的多部分表单数据请求?
【发布时间】:2018-08-31 13:26:06
【问题描述】:

您好,我是 swift4 的新手,并试图通过 alamofire 库以 swift4 语言调用多部分表单数据请求?下面是我的代码

Alamofire.upload(multipartFormData: { multipartFormData in
            multipartFormData.append("1422".data(using: String.Encoding.utf8)!, withName: "u_id")
            multipartFormData.append("How???".data(using: String.Encoding.utf8)!, withName: "firstname")
            multipartFormData.append("We are woking on it!!".data(using: String.Encoding.utf8)!, withName: "description")
        }, to: "URL_TOcall", encodingCompletion: { result in
            print("result  = \(result)")
            switch result {
            case .success(request: let request, streamingFromDisk: false, streamFileURL: nil):
                //Success code
                break

            case .failure:
                print("failed api calling")
                break


            case .success(let request, true, _):
                //Code here
                break

            case .success(let request, _, _):
                // Code here
                break
            }


        })
}

【问题讨论】:

  • 你有什么问题?
  • @PrashantTukadiya 我正在调用 url 及其 in post 方法,响应正确,但我在 mutablearraydata 中发布的参数未在服务器中更新。
  • 我已经在邮递员中尝试过,它工作正常,但是这里的代码功能失败了。
  • 您的 post 参数在 http 正文中或作为 url 中的查询字符串?
  • @PrashantTukadiya 在 http 正文中

标签: ios iphone swift4 alamofire


【解决方案1】:

如果您因为没有上传图片数据而遇到问题

Alamofire.upload(multipartFormData: { multipartFormData in
            // MISSING THIS LINE
            if let imageData = UIImagePNGRepresentation(yourimage) {
                multipartFormData.append(imageData, withName: "", fileName: "filename\(Date().timeIntervalSince1970)")
            }

            multipartFormData.append("1422".data(using: String.Encoding.utf8)!, withName: "u_id")
            multipartFormData.append("How???".data(using: String.Encoding.utf8)!, withName: "firstname")
            multipartFormData.append("We are woking on it!!".data(using: String.Encoding.utf8)!, withName: "description")
    }, to: "URL_TOcall", encodingCompletion: { result in
        print("result  = \(result)")
         switch result {
            case .success(let request, _,  _):
                print(request)
                request.responseJSON(completionHandler: { (resonse) in
                    print(resonse)

                })


            case .failure( let error):
                print(error)
                break
            }
       }

    })
}

【讨论】:

    【解决方案2】:

    我已经解决了我的问题,这是我没有做的太傻和太小的事情,但是在我的字符串转换中添加 allowLossyConversion: false 之后就成功了。

    {
     //corrected indentation for code
    
     Alamofire.upload(multipartFormData: { multipartFormData in
            multipartFormData.append("1422".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "u_id")
            multipartFormData.append("How???".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "firstname")
            multipartFormData.append("We are woking on it!!".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "description")
        }, to: "URL_TOcall", encodingCompletion: { result in
            print("result  = \(result)")
            switch result {
            case .success(request: let request, streamingFromDisk: false, streamFileURL: nil):
                //Success code
                break
    
            case .failure:
                print("failed api calling")
                break
    
    
            case .success(let request, true, _):
                //Code here
                break
    
            case .success(let request, _, _):
                // Code here
                break
            }
        })
    }
    

    【讨论】:

    • 但是allowLossyConversion : false 是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多