Swift 带有多个图像的多部分表单数据上传+;参数(阿拉莫菲尔5.2)

Swift 带有多个图像的多部分表单数据上传+;参数(阿拉莫菲尔5.2),swift,alamofire,Swift,Alamofire,我正在尝试使用“Alamofire 5.2”将多个图像和参数上载到服务器 这是服务器所期望的 [{"key":"media1","description":"","type":"file","value":["/C:/Users/x/x/x/x.jpg"]}, [{"key":"media2",&q

我正在尝试使用“Alamofire 5.2”将多个图像和参数上载到服务器 这是服务器所期望的

[{"key":"media1","description":"","type":"file","value":["/C:/Users/x/x/x/x.jpg"]},
[{"key":"media2","description":"","type":"file","value":["/C:/Users/x/x/x/x.jpg"]},
[{"key":"media3","description":"","type":"file","value":["/C:/Users/x/x/x/x.jpg"]},

{"key":"model","value":"{\"emp_Id\": \"6\",\"device_Identifier\":\"Device 01\",\"timestamp\":\"123\,”\description\”:\”description\",”handoverStatus”:”false”}","type":"text"}]

//Please note the array part
这就是我如何将拾取的图像添加到图像数组的方法

var dictImage : [UIImage]?

if pickedImage.pngData() != nil
{
  dictImage!.append(pickedImage)
}

这就是我试图调用alamofire上传的方式

func xyz()
{
        let param : [String: Any] = [
            "emp_Id" : "",
            "device_Identifier" : "",
            "timestamp" : "",
            "description" : "",
            "handoverStatus" : ""
        ]
    let urlString = URL(string: APIDetails.BaseUrl + "api/123")!
    let url = (try? URLRequest(url: urlString, method: .post, headers: APIDetails.header))!
    AF.upload(multipartFormData: { (multipartData) in
        
        let img1 = arrImage![0]
        let img2 = arrImage![1]
        let img3 = arrImage![2]

        multipartData.append(img1.pngData(), withName:"media1", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "file")
        multipartData.append(img2.pngData(), withName:"media2", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "file")
        multipartData.append(img3.pngData(), withName:"media3", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "file")
            
        
        for (key, value) in param {
            multipartData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }

    }, with: url)
}


如何将每个图像及其详细信息作为字典上传

我如何添加上传进度和结果,以显示是否有任何失败

我试过了


}, with: url,encodingCompletion:{
        EncodingResult in
        switch EncodingResult{
        case .success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint("SUCCESS RESPONSE: \(response)")
            }
        case .failure(let encodingError):

            print("ERROR RESPONSE: \(encodingError)")

        }        })
但它在调用中提供了error
额外的参数“encodingCompletion”


(这是我第一次尝试上传多部分表单数据,代码/部分来自另一个答案)

试试这段代码,我没有在Alamofire(5.2)中测试过

让baseUrl=“您的URL”
让fullUrl=baseUrl+strUrl
var headers:HTTPHeaders=HTTPHeaders([“内容类型”:“多部分/表单数据”])
如果let header=header{
页眉=页眉
}
guard let url=try?URLRESQUEST(url:fullUrl,方法:.post,头:头)else{return}
AF.upload(multipartFormData:{(multipartData)在
对于0中的i..
如果让header=header{headers=header},该怎么办?它还说“在作用域中找不到‘头’”@Zyfe3r头添加在URLRequest中,头包含API请求和响应所需的信息、令牌和元数据。我已经弄明白了。但不知何故,什么都不起作用,我不断从后端得到一些关于异常的错误。但同样的东西在android上也能完美地工作@Zyfe3r共享错误和您的代码如果没有它,我无法找出它,而此代码适合我
let baseUrl = "your URL"
    let fullUrl = baseUrl + strUrl
    var headers : HTTPHeaders = HTTPHeaders(["Content-type" : "multipart/form-data"])
    if let header = header{
        headers = header
    }
    
    guard let url = try? URLRequest(url: fullUrl, method: .post, headers: headers) else {return}
    AF.upload(multipartFormData: { (multipartData) in
        
        for i in 0 ..< arrImage.count{
            if let imageData = arrImage[i].pngData(){
                let mediaName = "media\(i + 1)"
                multipartData.append(imageData, withName:mediaName, fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "file")
            }
        }
      for (key, value) in parameter {
            multipartData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }
    }, to: url).responseJSON(queue: .main, options: .allowFragments) { (response) in
        switch response.result{
        case .success(let value):
            print("Json: \(value)")
        case .failure(let error):
            print("Error: \(error.localizedDescription)")
        }
    }.uploadProgress { (progress) in
        print("Progress: \(progress.fractionCompleted)")
    }