Swift 发送带有特定参数的图像?

Swift 发送带有特定参数的图像?,swift,alamofire,alamofireimage,Swift,Alamofire,Alamofireimage,我发送纯文本没有问题 例如,我有以下请求: func buyWholeSaler(url : String, token:String, manager:String, fio:String,phone:String, sender:String, carrier:String, document:String,shipping_id:String,pay_type:String, shipping_pay:String, amount_nalogi:String, shipping_retur

我发送纯文本没有问题

例如,我有以下请求:

func buyWholeSaler(url : String, token:String, manager:String, fio:String,phone:String, sender:String, carrier:String, document:String,shipping_id:String,pay_type:String, shipping_pay:String, amount_nalogi:String, shipping_return:String,money_recipient :String,comment:String, completion: @escaping (JSON)-> Void) {
        let headers: HTTPHeaders = [
            "Authorization": "Bearer \(token)",
            "Accept": "application/json"
        ]

        let parameters: Parameters = [
            "shipping_id" : shipping_id,
            "pay_type": pay_type,
            "manager" : manager,
            "fio" : fio,
            "phone" : phone,
            "sender" : sender,
            "carrier" : carrier,
            "document" : document,
            "shipping_pay": shipping_pay,
            "amount_nalogi": amount_nalogi,
            "shipping_return" :shipping_return,
            "money_recipient" : money_recipient,
            "comment" : comment
        ]
        AF.request(url,method: .post, parameters: parameters, headers:headers).responseJSON { response in
            switch response.result {
            case .success(let value):
                let json = JSON(value)
                completion(json)
            case .failure(let error):
                print(error)
            }
        }
    }
但是如何发送带有这些参数的图片

我有两张照片

var image1 = UIImage()
var image2 = UIImage()
如何重写请求以正确发送?例如:

let parameters: Parameters = [
            "shipping_id" : shipping_id,
            "pay_type": pay_type,
            ...
            "ur_file_pdv": image1,
            "ur_file_er": image1
        ]
我找到了此请求,但我无法理解其工作原理:

AF.upload(multipartFormData: { multiPart in
                        for p in parameters {
                            multiPart.append("\(p.value)".data(using: String.Encoding.utf8)!, withName: p.key)
                        }
                        multiPart.append(imageVityagPdv.jpegData(compressionQuality: 0.4)!, withName: "ur_file_pdv", fileName: "ur_file_pdv.jpg", mimeType: "image/jpg")
                        multiPart.append(imageVityag.jpegData(compressionQuality: 0.4)!, withName: "ur_file_er", fileName: "ur_file_er.jpg", mimeType: "image/jpg")
                    }, to: url, method: .post, headers: headers) .uploadProgress(queue: .main, closure: { progress in
                        print("Upload Progress: \(progress.fractionCompleted)")
                    }).responseJSON(completionHandler: { data in
                        print("upload finished: \(data)")
                        let success = json["success"].stringValue
                    }).response { (response) in
                        switch response.result {
                        case .success(let resut):
                            print("upload success result: \(resut!)")
 case .failure(let err):
                            print("upload err: \(err)")
                        }
                    }
它似乎在向服务器上传一些东西,但顺序没有发生

您不能将“数据”添加为参数,尤其是因为发出“请求”是为了从服务器检索数据,请求应该非常小,只需向服务器提供您实际想从服务器接收的信息(文本形式)。要上传一些东西,您可以使用POST请求,您可以在Alamofire中使用AF.upload进行上传,如下所示

你所说的“秩序不会发生”是什么意思?也许你有一些服务器代码,这样我们就可以知道问题出在哪里了?可能是它希望参数为GET,在这种情况下,您可以直接将它们添加到URL

func buyWholeSaler(url : String, token: String, manager: String,
    fio: String, phone: String, sender: String, carrier: String,
    document: String, shipping_id: String, pay_type: String,
    shipping_pay: String, amount_nalogi: String,
    shipping_return: String, money_recipient: String, comment:String,
    completion: @escaping (JSON) -> Void) {

    let headers: HTTPHeaders = [
        "Authorization": "Bearer \(token)",
        "Accept": "application/json"
    ]

    let parameters: Parameters = [
        "shipping_id" : shipping_id,
        "pay_type": pay_type,
        "manager" : manager,
        "fio" : fio,
        "phone" : phone,
        "sender" : sender,
        "carrier" : carrier,
        "document" : document,
        "shipping_pay": shipping_pay,
        "amount_nalogi": amount_nalogi,
        "shipping_return" :shipping_return,
        "money_recipient" : money_recipient,
        "comment" : comment
    ]

    AF.upload(multipartFormData: { (multipartFormData) in
        parameters.forEach({ multipartFormData.append("\(p.value)".data(using: .utf8)!, withName: p.key) })
        multipartFormData.append(image1.jpegData(compressionQuality: 0.4)!,
            withName: "ur_file_pdv", fileName: "ur_file_pdv.jpg", mimeType: "image/jpg")
        multipartFormData.append(image2.jpegData(compressionQuality: 0.4)!,
            withName: "ur_file_er", fileName: "ur_file_er.jpg", mimeType: "image/jpg")
    },
    to: url, method: .post, headers : headers).responseJSON { (response) in
        switch response.result {
        case .success(let value): completion(JSON(value))
        case .failure(let error): print(error)
        }
    }
}
您不能将“数据”添加为参数,尤其是因为“请求”是为了从服务器检索数据而发出的,并且应该非常小,只需向服务器提供您实际希望从中接收的信息(文本形式)。要上传一些东西,您可以使用POST请求,您可以在Alamofire中使用AF.upload进行上传,如下所示

你所说的“秩序不会发生”是什么意思?也许你有一些服务器代码,这样我们就可以知道问题出在哪里了?可能是它希望参数为GET,在这种情况下,您可以直接将它们添加到URL

func buyWholeSaler(url : String, token: String, manager: String,
    fio: String, phone: String, sender: String, carrier: String,
    document: String, shipping_id: String, pay_type: String,
    shipping_pay: String, amount_nalogi: String,
    shipping_return: String, money_recipient: String, comment:String,
    completion: @escaping (JSON) -> Void) {

    let headers: HTTPHeaders = [
        "Authorization": "Bearer \(token)",
        "Accept": "application/json"
    ]

    let parameters: Parameters = [
        "shipping_id" : shipping_id,
        "pay_type": pay_type,
        "manager" : manager,
        "fio" : fio,
        "phone" : phone,
        "sender" : sender,
        "carrier" : carrier,
        "document" : document,
        "shipping_pay": shipping_pay,
        "amount_nalogi": amount_nalogi,
        "shipping_return" :shipping_return,
        "money_recipient" : money_recipient,
        "comment" : comment
    ]

    AF.upload(multipartFormData: { (multipartFormData) in
        parameters.forEach({ multipartFormData.append("\(p.value)".data(using: .utf8)!, withName: p.key) })
        multipartFormData.append(image1.jpegData(compressionQuality: 0.4)!,
            withName: "ur_file_pdv", fileName: "ur_file_pdv.jpg", mimeType: "image/jpg")
        multipartFormData.append(image2.jpegData(compressionQuality: 0.4)!,
            withName: "ur_file_er", fileName: "ur_file_er.jpg", mimeType: "image/jpg")
    },
    to: url, method: .post, headers : headers).responseJSON { (response) in
        switch response.result {
        case .success(let value): completion(JSON(value))
        case .failure(let error): print(error)
        }
    }
}
assest路径将是图像url,它应该是本地路径,或者您也可以转换为数据形式,但最好直接附加路径


assest路径将是图像url,它应该是本地路径,或者您也可以转换为数据形式,但最好直接附加路径。

您所说的“顺序不发生”是什么意思?最后一段代码应该可以很好地满足您的要求。您将参数和图像(作为数据)附加到请求中,然后将其作为.post发送。@unixb0y在第一种情况下,如果我的服务器一切正常,或者出现一些错误,例如空字段,我会收到json响应。在第二种情况下,我刚刚收到
上传成功结果:\(resut!)
,关于空字段的任何信息,我的服务器上的任何信息“订单未发生”是什么意思?最后一段代码应该可以很好地满足您的要求。您将参数和图像(作为数据)附加到请求中,然后将其作为.post发送。@unixb0y在第一种情况下,如果我的服务器一切正常,或者出现一些错误,例如空字段,我会收到json响应。在第二种情况下,我刚刚收到
上传成功结果:\(resut!)
,任何关于空字段的信息,任何来自我服务器的信息