在 swift 3.0 中将选定的视频文件分段上传到服务器



我尝试使用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)
}

最新更新