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 相关文章推荐
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
使用jquery为table动态添加行的实现代码
Mar 30 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
Mar 15 Javascript
js运动应用实例解析
Dec 28 Javascript
AngularJS基础 ng-include 指令示例讲解
Aug 01 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
javascript将url解析为json格式的两种方法
Aug 18 Javascript
详解node nvm进行node多版本管理
Oct 21 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
前端JavaScript大管家 package.json
Nov 02 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中Http协议post请求参数
2015/11/02 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
Prototype Date对象 学习
2009/07/12 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
浅谈Vue.js
2017/03/02 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
python检测某个变量是否有定义的方法
2015/05/20 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
Sql面试题
2013/03/20 面试题
高校教师自荐信范文
2014/03/13 职场文书
项目经理聘任书
2014/03/29 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书