cordova插件file使用时遇到的一个平台相关的问题

使用cordova-plugin-file可以帮助我们方便的操作app中的图片等文件,分享一下我在用该插件从图库读取图片时遇到的一个平台相关的小问题。

使用场景,我会在APP中新增一张图片,会有一个可点击的【保存】按钮,点击时将图片copy到自己新建的目录下。

在Android平台下(小米5),选中图片之后,系统的路径形式是:“file://路径+图片名.后缀名+?+时间戳”的方式。而iOS平台是一个“file://路径+图片名.后缀名”的方式。

在Android平台下需要对图片路径字符串进行截取,把?后面的字符串截取调,只保留前面部分。

 1 // fileItem是一个图片对象,filePath是真正的路径
 2 if($ionicPlatform.isIOS){
 3      fileItem.filePath = fileItem.filePath.substring(0, fileItem.filePath.length);//iOS 平台选的图片生成路径中没有‘?‘,返回-1, substring 不接受负值 会返回空
 4
 5  }else {
 6      fileItem.filePath = fileItem.filePath.substring(0, fileItem.filePath.lastIndexOf("?"));
 7  }
 8 //或者
 9  fileItem.filePath = fileItem.filePath.substring(0, fileItem.filePath.lastIndexOf("?")=== -1 ? fileItem.filePath.length : fileItem.filePath.lastIndexOf("?"));
10 //这样不同平台下,文件路径就可以个格式化为"file://.../image.jpeg"

不可统一写成

fileItem.filePath = fileItem.filePath.substring(0, fileItem.filePath.lastIndexOf("?"));
这里在iOS平台下回返回-1,而substring不接受负数,否则会返回空数组[]。导致格式化的路径失败。

具体的cordova-plugin-file的更多操作文件的函数请参考

http://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#file-system-layouts

https://github.com/apache/cordova-plugin-file

时间: 2024-11-02 16:21:01

cordova插件file使用时遇到的一个平台相关的问题的相关文章

vue父子组件使用时遇到的一个问题

子组件一定要写在父组件之前,例如: //子vue,这里遇到一个坑,那就是子vue一定要写在父vue前面,不然会报错. Vue.component('todo-item', { template: $("#languageList").html() }); //使用Vue渲染模板 var vue = new Vue({ el: "#vueContainer", data: { plats: translateConfig.plats,//平台 projects: []

idea使用时遇到的一个小问题

使用idea开发 自带的mave 3可以使用,自己下载的maven3.5.2设置后总是报错 unable to import maven project maven安装没有问题  mvn -v 是正确的 从idea-help-show log in explorer 查看日志 发现 启动maven时 找不到 org.apache.maven.cli..下的一个class, 所以在idea中使用maven时error. 解决办法: 升级了下idea,就可以了. 根源:版本冲突导致的. 原文地址:h

如何给Ionic写一个cordova插件

写一个cordova插件 之前由javaWeb转html5开发,由于面临新技术,遂在适应的过程中极为挣扎,不过还好~,这个过程也极为短暂:现如今面临一些较为复杂的需求还会有一丝丝头痛,却没有一开始那么强烈了... 在正式写下文之前,我先感谢公司大boss:王总,感谢他让我进入了一个有挑战性的技术公司 并在这个过程中一直鼓励我不断汲取新技术,同时也指正了我在开发中的一些不太好的习惯,十分感谢! 再~,感谢在开发中给予我太多帮助的杜勇以及孙金~,不论是需求讨论还是具体开发阶段都会给予一些十分有用的思

iScroll.js和Swiper.js联合使用时的插件冲突(滑动冲突)

                  上面的截图 ,是手机端的一个滑动刷新效果.用的是scroll.js插件. 每项中又有一个滑动,是左右滑动的用swiper.js插件,查看每个班级的信息. 当手从swiper上开始滑动的时候,整个scroll就显得很不灵敏.各种调试,各种alert终于把问题定位在swiper.js的touchend上. touchend没有冒泡到scroll上,但是touchstart,toucnmove是有冒泡到scroll上的. 找了好久都没有找到哪里阻止了冒泡.最后想到一

RHEL6.5上Oracle ACFS与Linux samba一起使用时遇到的bug

RHEL上的Oracle ACFS与linux samba一起使用时遇到的bug 一.环境介绍: cat /etc/issue的结果为: Red Hat Enterprise Linux Server release 6.5 (Santiago) Kernel \r on an \m GI的详细patch信息:仅仅安装了GI的11.2.0.4版本,没有打任何的GI psu,没有打任何的GI patch 二.问题说明: 这是一套rhel6.5的rac,使用的是Oracle GI集群软件,使用了ac

理清cordova插件的调用流程

从调用的角度看流程  前端调用(clobbers)-->cordova_plugins.js(clobbers对应插件id和插件文件所在的路径)-–>js部分(配置着插件的名字,已经插件里面都有的方法)-->config.xml(根据插件的名字找到对应的插件原生文件的包名)-->原生(根据匹配到的方法名,来调用原生方法,另外也可以获取到js传递下来的参数) 简单说:前端调用-->桥梁:(cordova_plugin.js clobbers)-->js文件-->桥梁

iOS使用Object-C自定义cordova插件(-)

1.  创建项目 打开终端,切换到桌面,然后使用`ionic`创建一个测试项目,命名CountTest. cd ./Desktop/ sudo ionic start CountDemo 或 //使用cordova ,但是后期cordova不知道怎么引导ionic中,如果你知道请留言告诉我,感谢!        sudo cordova create CountDemo com.twenty.CountDemo CountDemo 1: 项目创建到桌面的目录名, 2: iOS Bundle Id

protobuf在使用时出现的问题小汇总

文章开头放一下IBM的google protocol buffer的介绍链接.http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ 对于这种技术不断更新的东西,我只能这么理解:因为技术在更新,版本在变化,之前很详尽的技术博文可能在之后的版本中遇到无法预知的问题,所以我们在使用时要注意甄别.废话不多说,进入正文部分. 安装什么的都是小问题了,还是贴一下步骤吧. tar -xzf protobuf-2.5.0.tar.gz cd protobuf-

混合开发-利用Cordova插件实现HTML5 与 原生代码的连接

主要利用的就是通过Cordova这个东西, 进行HTML5 与 iOS断值得传递 列子:把HTML5 获取的日期同步到iOS系统的日历中去 1. 原生代码:.h.m 提供一个接口文件 主要代码: - (BOOL)saveEventToCalender:(NSString *)title content:(NSString *)contentTitle year:(NSString *)year date:(NSString *)date time:(NSString *)time { // 定义