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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
记录几个javascript有关的小细节
Apr 02 Javascript
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
Dec 21 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
Mar 19 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
Jul 01 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
May 12 Javascript
AngularJs页面筛选标签小功能
Aug 01 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
javascript遍历json对象的key和任意js对象属性实例
Mar 09 Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 jQuery
js前端面试之同步与异步问题详解
Apr 03 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 数组二分法查找函数代码
2010/02/16 PHP
PHP If Else(elsefi) 语句
2013/04/07 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
python3使用urllib模块制作网络爬虫
2016/04/08 Python
python 中的int()函数怎么用
2017/10/17 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
Python requests获取网页常用方法解析
2020/02/20 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
结婚典礼证婚词
2014/01/11 职场文书
设计师求职信
2014/07/01 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
校运会加油稿大全
2015/07/22 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记