我需要使用 alamofire 将视频上传到服务器。用户选择视频,我在 didFinishPickingMediaWithInfo 中成功获取 URL,如下所示:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
picker.dismiss(animated: true, completion: nil)
if let pickedVideo = info[UIImagePickerControllerMediaURL] as? URL {
print(pickedVideo)
}
}
然后我使用以下代码上传视频:
Alamofire.upload( multipartFormData: { multipartFormData in
multipartFormData.append(videoUrl, withName: "video", fileName: "video.mp4", mimeType: "video/mp4")
}, to: url, encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
if let JSON = response.result.value as? NSDictionary {
completion(true)
} else {
completion(false)
print(response)
}
}
case .failure(let encodingError):
print(encodingError)
completion(false)
}
})
它进入故障块,并显示以下错误:
multipartEncodingFailed(Alamofire.AFError.MultipartEncodingFailureReason.bodyPartFileNotReachableWithError(atURL:
文件:/private/var/mobile/Containers/Data/Application/C662AB0E-6A4F-40FB-9949-7F0A5AA2BA49/tmp/52C86F07-5DCC-413A-9F8C-71BBF33F793C.MOV
-- file:///,错误:错误域=NSCocoaErrorDomain Code=260“无法打开文件“52C86F07-5DCC-413A-9F8C-71BBF33F793C.MOV”,因为
没有这样的文件。
您正在尝试通过 URL 上传视频,但这是不可能的multipartFormData
需要上传数据而不是URL,所以首先将其转换为Data
然后上传。
显示 uiimagePickerController 的功能仅适用于视频:
func showImagePicker(){
let picker = UIImagePickerController()
picker.delegate = self
picker.mediaTypes = [kUTTypeMovie as String]
self.present(picker, animated: true, completion: nil)
}
UIImagePickerControllerDelegate
功能,在选择视频后起作用:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
picker.dismiss(animated: true, completion: nil)
guard let videoUrl = info[UIImagePickerControllerMediaURL] as? URL else {
return
}
do {
let data = try Data(contentsOf: videoUrl, options: .mappedIfSafe)
print(data)
// here you can see data bytes of selected video, this data object is upload to server by multipartFormData upload
} catch {
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)