【发布时间】:2017-10-21 16:08:11
【问题描述】:
在试图弄清楚这一点时遇到了困难。使用 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 请求并且包含用于身份验证的标头,我将不胜感激。
【问题讨论】: