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 相关文章推荐
百度 popup.js 完美修正版非常的不错 脚本之家推荐
Apr 17 Javascript
js中如何把字符串转化为对象、数组示例代码
Jul 17 Javascript
浅析jquery的js图表组件highcharts
Mar 06 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
Aug 01 Javascript
js遍历json的key和value的实例
Jan 22 Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
基于jQuery选择器之表单对象属性筛选选择器的实例
Sep 19 jQuery
webpack配置之后端渲染详解
Oct 26 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 Javascript
vue实现循环滚动列表
Jun 30 Javascript
Vue中computed和watch有哪些区别
Dec 19 Vue.js
在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实现的memcache环形队列类实例
2015/07/28 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
Augularjs-起步详解
2016/07/08 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
python 实现的车牌识别项目
2021/01/25 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
数组越界问题
2015/10/21 面试题
介绍一下linux的文件权限
2014/07/20 面试题
教育实习生的自我评价分享
2013/11/21 职场文书
班风口号
2014/06/18 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
2014年客房部工作总结
2014/11/22 职场文书
护理培训心得体会
2016/01/22 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python