ionic cordova一次上传多张图片(类似input file提交表单)的实现方法


Posted in Javascript onDecember 16, 2016

我们可以通过cordova提供的插件调用摄像头或图库选择需要的图片上传,按cordova官方的方法,每次选择完后就直接上传,这并不符合用户的习惯,最好的用户习惯是用户选择完需要的图片,并可在本地预览,接着用户再次打开摄像头或图库再次选择图片,接着预览,对于不需要的图片删除,最后确定可以后,再一次性上传所有图片。显然这种方式,cordova是不支持,那要如何实现呢,以下是我的方法:

通过调用$cordovaImagePicker.getPictures该方法打开图库,获得图片的URL地址,ps:相机原理相同

$cordovaImagePicker.getPictures(options).then(function(imageURI) { 
 
  for(var i=0; i<imageURI.length; i++){ 
    rLFSURL(imageURI[i]); 
  } 
 
}, function(err) { 
  if (err.message && (err.message.toString().indexOf('cancelled') < 0)) { 
    $scope.popTips('打开失败','打开图片遇到问题'); 
  }   
});

上面方法可以获得一组图片地址列表,接下来要做的就是把这些图片转成二进制流存储在本地,如下:

function rLFSURL(imageURI){ 
  window.resolveLocalFileSystemURL(imageURI, function(fileEntry) { 
    fileEntry.file(function(file) { 
      var reader = new FileReader(); 
      reader.onloadend = function(e) { 
        //需要将图片路径转换为二进制流,并且指定类型为图像格式(还有其他格式,如文本格式等等) 
        var the_file = new Blob([e.target.result ], { type: "image/jpeg" } ); 
        //存储图片二进制流 
        CacheData.setImgFileList(the_file); 
        //存储图片地址用于预览 
        CacheData.setImageURIList(imageURI); 
      }; 
      reader.readAsArrayBuffer(file); 
    }, function(e){$scope.errorHandler(e)}); 
  }, function(e){$scope.errorHandler(e)}); 
}

上面的关键是var the_file = new Blob([e.target.result ], { type: "image/jpeg" } );,这是将图片转化为二进制,然后我用事先定义好的方法CacheData.setImgFileList()和CacheData.setImageURIList()把转化后的二进制流及图片存储起来。主意new Blob()方法并不兼容低版本的安卓系统。

如果再增加图片,我们只需要把他push进我们的数组里即可,删除的话就splice(index, 1)掉,这样待用户操作完后,点提交,我就把这些参数append进new FormData()里就OK了,如下

for(var i=0; i < CacheData.getImgFileList().length; i++){ 
  formDataByImage.append("files", CacheData.getImgFileList()[i],"images.jpg"); 
} 
//以下是表单参数 
formDataByImage.append("tenantId", 1); 
formDataByImage.append("facilityIdentify", "217ae60e5bc746f"); 
//formDataByImage.append("nodeName", nodeName); 
formDataByImage.append('sessiontoken', formData.sessiontoken); 
formDataByImage.append('method', 'fax.upload');

后台接收的方法就跟input file提交表单一样,这里就不多写。

下面给大家补充下:Ionic 和cordova的区别是什么

很多新朋友ionic基础教程都学完了,还是不知道ionic 和cordova 是什么关系

ionic是什么:

Ionic(ionicframework)一款开源的Html5移动App开发框架,是AngularJS移动端解决方案,Ionic以流行的跨平台移动app开发框架phoengap为蓝本,让开发者可以通过命令行工具快速生成android ios移动app应用

phoengap是什么?

PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台。它使开发者能够利用iPhone,Android,Palm,Symbian,WP7,WP8,Bada和Blackberry智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动.

可能有些新手还是不明白,继续往下看:

通俗的讲:ionic是一款基于angularjs的html5移动app开发框架

phonegap就是一款可以打包并且可以让js调用原生的移动app框架

问题来了?

那我不用命令安装ionic 可以使用ionic开发app吗?答案是可以得。

就可以把ionic当作一款html5 移动app框架,把phonegap/cordova 当作打包 并且调用原生的框架就可以了

至于:为什么ionic也可以打包,上面也说了,ionic的打包插件是基于phonegap/cordova的.

以上所述是小编给大家介绍的ionic cordova一次上传多张图片(类似input file提交表单)的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js与jquery实时监听输入框值的oninput与onpropertychange方法
Feb 05 Javascript
详解AngularJs中$resource和restfu服务端数据交互
Sep 21 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
Ionic项目中Native Camera的使用方法
Jun 07 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
Sep 16 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
Oct 19 Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 jQuery
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
深入了解JavaScript 私有化
May 30 Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
Sep 08 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 #Javascript
概述jQuery中的ajax方法
Dec 16 #Javascript
JS数组排序方法实例分析
Dec 16 #Javascript
jquery UI Datepicker时间控件冲突问题解决
Dec 16 #Javascript
详解jQuery简单的表单应用
Dec 16 #Javascript
浅谈JavaScript的自动垃圾收集机制
Dec 15 #Javascript
简单三步实现报表页面集成天气
Dec 15 #Javascript
You might like
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
php简单判断文本编码的方法
2015/07/30 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
实例详解带参数的 npm script
2019/05/28 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
python算法表示概念扫盲教程
2017/04/13 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
python创建n行m列数组示例
2019/12/02 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
Python对象的属性访问过程详解
2020/03/05 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
体育课外活动总结
2014/07/08 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
会议接待欢迎标语
2014/10/08 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
nginx实现动静分离的方法示例
2021/11/07 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang