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 相关文章推荐
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
Jul 17 Javascript
javascript实现手机震动API代码
Aug 05 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
浅谈javascript的url参数parse和build函数
Mar 04 Javascript
详谈jQuery.load()和Jsp的include的区别
Apr 12 jQuery
mpvue构建小程序的方法(步骤+地址)
May 22 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
Aug 22 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
Nov 25 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 Javascript
世界上最短的数字判断js代码
Sep 09 Javascript
vue router 传参获取不到的解决方式
Nov 13 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
laravel框架创建授权策略实例分析
2019/11/22 PHP
Javascript实现的分页函数
2007/02/07 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
Python列表(list)常用操作方法小结
2015/02/02 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
python用requests实现http请求代码实例
2019/10/31 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
python语言中有算法吗
2020/06/16 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
业绩考核岗位职责
2014/02/01 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS
使用scrapy实现增量式爬取方式
2022/06/21 Python