ios获取视频文件路径报错NSPOSIXErrorDomain

背景
更新iOS13后发现视频上传无法正常获取,图片能正常获取, 经过调试发现在获取视频路径的时候提示权限不足,无法正常访问


2023-09-27 15:14:16.533951+0800 renhxy erp[55862:4313416] Error opening file /private/var/mobile/Containers/Data/PluginKitPlugin/xxx/tmp/txxx.MOV: Error Domain=NSCocoaErrorDomain Code=257 "未能打开文件“xxx.MOV”,因为你没有查看它的权限。"

经过多方面的查看和研究发现
存在这个问题是因为iOS系统13版本系统和13以下的版本系统存在获取视频文件路径差异:
IOS13以后的获取路径

file:///private/var/mobile/Containers/Data/PluginKitPlugin/xxx/tmp/xx.MOV

IOS12及以下的获取路径

file:///private/var/mobile/Containers/Data/Application/xxx/tmp/xxx.MOV

可以看到一个是PluginKitPlugin,一个是Application,这就有很大区别了,根据iOS系统的沙盒原理,前者除了本应用其他肯定是无法访问的。所以导致开发的应用无法访问图片应用里面的视频文件

这里提供一个最简单有效的解决方案:获取文件前将文件拷贝复制到开发应用到目录下,这样就能识别获取文件了

直接上代码
1.调试排查找到获取文件返回前端的代码位置
2.将下方的代码复制拷贝获取,对于参数修改下
//2023-09-27 ios13后的路径不同,可能会导致文件路径有问题,因此在这里将文件复制成临时文件,在做上传处理NSString* moviePath = [videoUrl.path mutableCopy];  //这里有个需要划重点的地方 不能使用绝对路径videoUrl.absoluteString,需要使用 videoUrl.pathNSArray* spliteArray = [moviePath componentsSeparatedByString:@"/"]; //将文件路径使用“/”分割成字符串数组NSString* lastString = [spliteArray lastObject];  //获取文件名称NSError *error;NSFileManager *fileManage = [NSFileManager defaultManager];   //定义一个文件生成器//获取当前应用的Documents文件夹路径NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];//判断文件夹是否存在,不存在则新建if( ![fileManage fileExistsAtPath:documentsDirectory]){NSLog(@"文件夹不存在");//创建文件夹[fileManage createDirectoryAtPath:documentsDirectory withIntermediateDirectories:YES attributes:nil error:&error];}//将前面获取到的文件和文件夹拼接成一个文件路径,后面需要复制的路径NSString *filePath = [documentsDirectory stringByAppendingPathComponent:lastString];//通过文件管理器将视频文件拷贝一份到当前应用到Documents目录下,这样获取就不会出现权限不足的情况BOOL flagsuccess = [fileManage copyItemAtPath:moviePath toPath:filePath error:&error];// 视频选择后,将图片路径传回给页面CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:filePath];

正常情况下时能正常访问了

备注:写的不对或者不好的地方,欢迎指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143524.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

什么是Redux?它的核心概念有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是Redux?⭐ 它的核心概念有哪些?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发…

【ACL2023】Event Extraction as Question Generation and Answering

论文题目:Event Extraction as Question Generation and Answering 论文来源:ACL2023 论文链接:Event Extraction as Question Generation and Answering - ACL Anthology 代码链接:GitHub - dataminr-ai/Event-Extraction-as-…

Java-day18(网络编程)

网络编程 1.概述 Java提供跨平台的网络类库,可以实现无痛的网络连接,程序员面对的是一个统一的网络编程环境 网络编程的目的:直接或间接地通过网络协议与其他计算机进行通信 网络编程的两个主要问题: 1.如何准确定位网络上一台…

基于SSM的保险业务管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Kubernetes(K8s):未来云原生应用的引擎

文章目录 Kubernetes的核心概念和架构为什么K8s是构建云原生应用的首选工具?云原生应用的好处和挑战容器编排的重要性:Docker和KubernetesKubernetes生态系统:核心组件和附加工具实际应用:企业如何在生产环境中使用K8s未来展望&am…

【VUE复习·2】@click 之事件处理与函数(可传参);@click 阻止事件冒泡应用场景;@click 多修饰符应用场景(高级)

总览 1.“事件处理”是什么 2.click 函数参数传递应用 3.click 阻止事件冒泡应用场景 4.click 多修饰符应用场景(高级) 一、“事件处理”是什么 1.概念 我们在和页面进行交互时,进行点击或滑动或其他动作时,我们操作的是 DOM …

MR混合现实在军事课堂教学中的应用演示

战场模拟:利用MR技术可以创建逼真的战场模拟环境,将学生置身于真实的战场场景中,可以体验和学习各种作战技巧和战术策略。学生可以通过佩戴MR头盔或眼镜,观察虚拟的场景,并与虚拟对象进行互动,如操作武器、…

深度学习|如何确定 CUDA+PyTorch 版本

对于深度学习初学者来说,配置深度学习的环境可能是一大难题,因此本文主要讲解CUDA; cuDNN; Pytorch 三者是什么,以及他们之间的依赖关系。 CUDA CUDA(Compute Unified Device Architecture)是由NVIDIA开发的用于并行计…

【C/C++笔试练习】——printf在使用%的注意事项、for循环语句的三个条件、运算符优先级、删除公共字符

文章目录 C/C笔试练习1.%符号在printf用作格式说明符的注意事项(1)输出%5.3s(2)判断%中小数点含义 2.for循环语句的三个条件(3)判断循环次数(4)判断循环次数 3.运算符优先级&#xf…

独立站引流,如何在Reddit进行营销推广?

Reddit是目前最被忽视却最具潜力的社交媒体营销平台之一,它相当于国内的百度贴吧,是美国最大的论坛,也是美国第五大网站,流量仅次于Google、Youtube、Facebook以及亚马逊。 如果会玩,Reddit也可以跟其他的社交媒体营销…

Spring 学习(九)整合 Mybatis

1. 整合 Mybatis 步骤 导入相关 jar 包 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency>…

Django之初入门

一&#xff09;Django简介 1.简介 Django是一个开源的Python Web框架&#xff0c;它以简洁高效的方式帮助开发者构建复杂的Web应用程序。Django采用了MVC&#xff08;Model-View-Controller&#xff09;的架构模式&#xff0c;通过强大的工具和功能&#xff0c;提供了一套完整…

PHP 变动:PHP 8 版本下字符串与数值的弱比较

文章目录 参考环境声明弱比较隐式类型转换字符串连接数学运算布尔判断相等运算符 字符串与数值的弱比较字符串转化为数值的具体规则字符串与数值的弱比较一般情况科学计数法前缀 0E 与 0e PHP8 在字符串与数值的弱比较方面做出的改动数值字符串优化 参考 项目描述搜索引擎Bing…

数据库及分类详细介绍

目录 一、数据库详细介绍1、什么是数据库2、数据库的种类3、常见的数据库4、关系型数据库4.1、关系型数据库介绍4.2、关系型数据库的优缺点4.3、关系型数据库小结 5、非关系型数据库5.1、非关系数据库诞生的背景5.2、非关系型数据库的介绍5.3、非关系型数据库的优缺点5.4、非关…

js中的类型转换

原文地址 JavaScript 中有两种类型转换&#xff1a;隐式类型转换&#xff08;强制类型转换&#xff09;和显式类型转换。类型转换是将一个数据类型的值转换为另一个数据类型的值的过程。 隐式类型转换&#xff08;强制类型转换&#xff09;&#xff1a; 隐式类型转换是 Java…

NSSCTF

[SWPUCTF 2021 新生赛]gift_F12 在源代码界面找到了flag [SWPUCTF 2021 新生赛]jicao 源码 <?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"…

【Linux】Linux环境配置安装

目录 一、双系统&#xff08;特别不推荐&#xff09; 安装双系统的缺点&#xff1a; 安装双系统优点&#xff08;仅限老手&#xff09;&#xff1a; 二、虚拟机centos7镜像&#xff08;较为推荐推荐&#xff09; 虚拟机的优点&#xff1a; 虚拟机的缺点&#xff1a; ​ …

Molecular Cancer|CDK9抑制诱导表观遗传重编程,揭示了规避淋巴瘤耐药性的策略

细胞周期蛋白依赖性激酶&#xff08;CDK&#xff09;蛋白家族在细胞周期进程&#xff08;如CDK1/2/4/6&#xff09;和RNA转录&#xff08;如CDK7/8/9/11&#xff09;的调控中起着不可或缺的作用。由于染色体区域易位或基因扩增导致的CDKs表达失调与肿瘤发生有关。在淋巴瘤细胞中…

华为云云耀云服务器L实例评测 | 实例评测使用之硬件性能评测:华为云云耀云服务器下的硬件运行评测

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之硬件性能评测&#xff1a;华为云云耀云服务器下的硬件运行评测 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…