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 相关文章推荐
Javascript实现的分页函数
Dec 22 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
Jul 02 Javascript
js获取元素外链样式的方法
Jan 27 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
May 17 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
Aug 02 Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 Javascript
js闭包学习心得总结
Apr 17 Javascript
vue项目中api接口管理总结
Apr 20 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
js 实现Material UI点击涟漪效果示例
Sep 23 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
详解Yii2 rules 的验证规则
2016/12/02 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
Python对excel的基本操作方法
2021/02/18 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
《听鱼说话》教学反思
2014/02/15 职场文书
就业协议书怎么填
2014/04/11 职场文书
毕业生求职信
2014/06/10 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
小学运动会开幕词
2015/01/28 职场文书
2015年药店工作总结
2015/04/20 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
详解Vue的列表渲染
2021/11/20 Vue.js