Swift3 向Alamofire multiPartFormData上载添加标题

Swift3 向Alamofire multiPartFormData上载添加标题,swift3,alamofire,ios10,Swift3,Alamofire,Ios10,我一直很难弄明白这一点。使用Alamofire(4.4.0)和我的标题发布请求在大多数情况下都可以正常工作,但是这次我需要发送字符串字典和视频 视频通过UIImagePickerController录制,最终进入词典的信息通过一系列滑块、开关和文本字段创建 给我带来麻烦的模块如下: let headers: HTTPHeaders = [ "X-Access-Token": self.user ] let requestUrl = try! URLRequest(url:

我一直很难弄明白这一点。使用Alamofire(4.4.0)和我的标题发布请求在大多数情况下都可以正常工作,但是这次我需要发送字符串字典和视频

视频通过UIImagePickerController录制,最终进入词典的信息通过一系列滑块、开关和文本字段创建

给我带来麻烦的模块如下:

let headers: HTTPHeaders = [
        "X-Access-Token": self.user
    ]
let requestUrl = try! URLRequest(url: "http://exampleUrl.com", method: .post, headers: headers)

    upload(
        multipartFormData: { (multipartFormData) in
            multipartFormData.append(videoURL!, withName: "video_source")
            multipartFormData.append(self.alphaLabel.text!.data(using: .utf8)!, withName: "alpha")
            multipartFormData.append(self.betaLabel.text!.data(using: .utf8)!, withName: "beta")
            multipartFormData.append(self.gammaLabel.text!.data(using: .utf8)!, withName: "gamma")
            multipartFormData.append(self.deltaTextField.text!.data(using: .utf8)!, withName: "delta")
            multipartFormData.append(self.epsilonScrollPicker.data(using: .utf8)!, withName: "epsilon")
            multipartFormData.append(zetaArray!.data(using: .utf8)!, withName: "zeta")

        },
            to: requestUrl as! URLConvertible) { encodingResult in
                switch encodingResult {
                case .success (let upload, _, _):
                    upload.responseJSON { response in
                        print(response)
                    }
                case .failure (let encodingError):
                    print(encodingError)
            }
       }
上述代码给出: “线程1:信号SIGABRT”

控制台输出: “无法将'Foundation.URLRequest'类型的值强制转换为'Alamofire.URLConvertible'。”

为了检查其他功能是否正常,我运行了以下命令:

let requestUrl "http://exampleUrl.com"

upload(
    multipartFormData: { (multipartFormData) in
        multipartFormData.append(videoURL!, withName: "video_source")
        multipartFormData.append(self.alphaLabel.text!.data(using: .utf8)!, withName: "alpha")
        multipartFormData.append(self.betaLabel.text!.data(using: .utf8)!, withName: "beta")
        multipartFormData.append(self.gammaLabel.text!.data(using: .utf8)!, withName: "gamma")
        multipartFormData.append(self.deltaTextField.text!.data(using: .utf8)!, withName: "delta")
        multipartFormData.append(self.epsilonScrollPicker.data(using: .utf8)!, withName: "epsilon")
        multipartFormData.append(zetaArray!.data(using: .utf8)!, withName: "zeta")

    },
        to: requestUrl as! URLConvertible) { encodingResult in
            switch encodingResult {
            case .success (let upload, _, _):
                upload.responseJSON { response in
                    print(response)
                }
            case .failure (let encodingError):
                print(encodingError)


        }
    }
如果我使用不同的请求Url,一个没有其他参数的Url,我会从我的服务器获得一个401无效访问令牌。这是意料之中的,因为我无法在这个新请求的标题中传递一个


如果有人能告诉我如何上传multiPartFormData请求并且包含一个用于身份验证的头,我将不胜感激

我刚刚在我的工作代码中添加了你的标题。您可以用它替换代码

    let yourHeaders: HTTPHeaders = [
        "X-Access-Token": "dsfdsfdsf"
    ]

    Alamofire.upload(multipartFormData: { multipartFormData in

        for (key, value) in parameter
        {
            multipartFormData.append(value.data(using: .utf8 )! , withName: key)
        }
        for videoData in VideoDataArray 
        {
            if  videoData 
            {
                multipartFormData.append(videoData , withName: videoParameterName, fileName: "videoName.mp4", mimeType: "video/mp4")
            }
        }
    }, to: "YourApiUrlHere", method: .post, headers : yourHeaders,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    print(upload.progress)

                    upload.responseJSON {  response in

                        if let JSON = response.result.value
                        {
                            print("JSON: \(JSON)")                              
                    }
                    break
                case .failure( _):
                    }
                }
        })

但我不想上传图片。所以我不相信我能利用你的表现。除非你知道KuttypeMoine的等价物,否则我不知道你所拥有的是否能满足我的需要。@NickDiVona我告诉过你添加参数并处理响应。这只是Almofire方法调用的一个表示。如果你知道UIImageJPEG表示返回NSData,你可以在那里添加视频数据。啊,我明白了。谢谢。投票吧,它也会帮助别人。