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 相关文章推荐
setTimeout的延时为0时多个浏览器的区别
May 23 Javascript
关于JavaScript中string 的replace
Apr 12 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
Nov 17 Javascript
用JavaScript实现类似于ListBox功能示例代码
Mar 09 Javascript
JavaScript学习笔记之JS对象
Jan 22 Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
Javascript简写条件语句(推荐)
Jun 12 Javascript
浅谈javascript中关于日期和时间的基础知识
Jul 13 Javascript
jQuery制作图片旋转效果
Feb 02 Javascript
AngularJS实现单一页面内设置跳转路由的方法
Jun 28 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
js 动态加载事件的几种方法总结
2013/12/25 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
python 生成目录树及显示文件大小的代码
2009/07/23 Python
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
Python实现字典的key和values的交换
2015/08/04 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
django中的图片验证码功能
2019/09/18 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Django使用rest_framework写出API
2020/05/21 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
Hotels.com南非:酒店预订
2017/11/02 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
C语言笔试集
2012/07/24 面试题
蜜蜂引路教学反思
2014/02/04 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis