我尝试使用UIImagePicker选择文件。但是当我尝试使用多部分表单数据上传文件时Alamofire
它给出了以下错误
"multipartEncodingFailed(Alamofire.AFError.MultipartEncodingFailureReason.bodyPartURLInvalid(assets-library://asset/asset.MOV?id=00178364-C308-4D2F-9B06-ECFBF21B9128&ext=MOV((">
获取文件网址的方法
func selectVideoFromLibrary(sender: Any) {
let imagePickerController = UIImagePickerController()
imagePickerController.sourceType = .photoLibrary
imagePickerController.delegate = self
imagePickerController.mediaTypes = ["public.movie"]
present(imagePickerController, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
videoURL = info["UIImagePickerControllerReferenceURL"] as? NSURL
self.dismiss(animated: true, completion: nil)
}
Alamofire
上传以将文件上传到服务器
func uploadVideo(){
let serverURL = AppConfig.BASEPATH + AppConfig.UPLOAD
print("upload link is",AppConfig.BASEPATH + AppConfig.UPLOAD)
let vURL = self.videoURL! as URL
let vName = videoName.data(using: .ascii)
let pName = name.data(using: .ascii)
let pNo = phoneNo.data(using: .ascii)
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(vURL, withName: "uploadedfile")
multipartFormData.append(vName!, withName: "title")
multipartFormData.append(pName!, withName: "pname")
multipartFormData.append(pNo!, withName: "phoneno")
},
to: serverURL,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
print(response.result.value)
}
case .failure(let encodingError):
print(encodingError)
}
})
}
使用 info[UIImagePickerControllerMediaURL] 获取文件 url(file://...( 而不是资产库路径将解决您的问题。
作为以下代码
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
videoURL = info[UIImagePickerControllerMediaURL] as? NSURL
self.dismiss(animated: true, completion: nil)
}