如何解决在 SWIFT 中访问 IOS 设备上的视频文件路径 URL
我目前正在尝试使用 AWS IOS SDK 将视频文件上传到 AWSS3。这是我的过程:
// 我接受来自 UIIMagepicker 的视频数据 func imagePickerController(_picker: UIImagePickerController,didFinishPickingMediawithInfo info: [UIImagePickerController.InfoKey: Any]) {
var videoPath = "VideoPath"
if let videoURL = info[UIImagePickerController.InfoKey.mediaURL] {
print("Video URL: \(videoURL)")
uploadVideo(resource: "RandomName",type: "mov",url: videoURL as! URL)
thumbnailImageView.image =
}
//我然后调用这个上传视频函数,使视频的AWSS#transferutilityuploadtask。
let bucketName = “somebucketName"
var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
func uploadVideo(resource: String,type: String,url: URL){ //1
let key = "Tester.mov"
//let resource = Bundle.main.path(forResource: resource,ofType: type)!
let url = url
print(url)
// let url = url
let expression = AWSS3TransferUtilityUploadExpression()
expression.progressBlock = { (task: AWSS3TransferUtilityTask,progress: Progress) -> Void in
print("Progress: \(progress.fractionCompleted * 100 ) %")//2
print("Task state: \(task.progress)")
if progress.isFinished{ //3
print("100%...Upload Finished...")
print("finished Uploading \(url)")
dispatchQueue.main.async {
var alert = UIAlertController(title: "Congratulations!",message: "Successfully Uploaded Video",preferredStyle: .alert)
self.present(alert,animated: true,completion:nil)
alert.addAction(UIAlertAction(title: "OK",style: .default,handler: {
(action) in
}))
}
//do any task here.
}
}
expression.setValue("public-read-write",forRequestHeader: "x-amz-acl") //4
expression.setValue("public-read-write",forRequestParameter: "x-amz-acl")
completionHandler = { (task:AWSS3TransferUtilityUploadTask,error:NSError?) -> Void in
if(error != nil){
print("Failure uploading file")
}else{
print("Success uploading file!\(print(task.response))")
}
} as? AWSS3TransferUtilityUploadCompletionHandlerBlock
//5
AWSS3TransferUtility.default().uploadFile(url,bucket: bucketName,key: String(key),contentType: "video",expression: expression,completionHandler: self.completionHandler).continueWith(block: { (task:AWSTask) -> AnyObject? in
if(task.error != nil){
print("Error uploading file: \(String(describing: task.error?.localizedDescription))")
}
if(task.result != nil){
print("Starting upload...")
}
return nil
})
}
我还在我的应用程序委托中初始化了 AWSS3 传输连接。
这段代码在我的模拟器中完美运行。它从本地文件路径 url 获取文件并将其上传到我的 AWS Bucket。但是,当我在设备上运行它时,本地路径似乎无法访问视频数据。程序在“开始上传..”处停止 并显示 0 作为进度
我注意到从设备和 sumulator 创建的 url 是不同的。不确定如何同时接受,但由于某种原因,设备 url 没有提供正确的访问权限。
Simulator VideoURL file:///Users/dominiq/Library/Developer/CoreSimulator/Devices/66E08504-7B2B-4DC3-A473-F35E7BB575F6/data/Containers/Data/PluginKitPlugin/9E664198-080F-4C5C0E4E0C tmp/trim.2F6719E1-B2AC-4DF0-BA59-319A85B770DF.MOV
IOS 设备视频网址:
file:///private/var/mobile/Containers/Data/PluginKitPlugin/B62449E7-5EE3-4EAB-A5AC-F7C867928959/tmp/trim.C18D77B0-6247-40BB-A175-A1B0959P.MOV2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。