详解ionic本地相册、拍照、裁剪、上传(单图完全版)


Posted in Javascript onOctober 10, 2017

网络上已有的ionic图片选择上传博客碎片化过于严重,功能残缺或者引入了一些不必要的插件。这次以项目为契机,把ionic的图片选择、裁剪、上传整合一下,多图上传请戳ionic选择多张图片上传

插件安装

cordova plugin add cordova-plugin-camera //用于通过相机、相册选择图片并完成裁剪
cordova plugin add cordova-plugin-file-transfer //用于上传图片到服务器

将功能封装为服务

angular.module('starter.services', [])

//文件上传
.factory('UploadFile', function(Toast) {
 return {
 /**
  * 上传文件到服务器
  *
  * @param fileUrl 文件路径
  * @param server 服务器接口
  */
 uploadFile: function(fileUrl, server) {
  document.addEventListener("deviceready", onDeviceReady, false);
  function onDeviceReady() {
  var options = new FileUploadOptions();
  options.fileKey = "BeanYon";
  options.fileName = fileUrl.substr(fileUrl.lastIndexOf('/') + 1);
  options.mimeType = "image/jpeg";
  options.chunkedMode = false;

  var params = {account: localStorage.account};
  options.params = params;

  var ft = new FileTransfer();
  ft.upload(fileUrl, 
     encodeURI(server), 
     success, 
     err, 
     options);
  }

  function success(r){
  Toast.show("设置头像成功");
  }

  function err(error){
  Toast.show("上传头像失败,请确保网络正常后再试");
  }
 }
 }
})

//配置单张图片选择
.factory('SelectPicture', function(UploadFile, Toast) {
 return {
 /**
  * 从相机或图库选择一张图片
  * 
  * @param type 选择类型,0 拍照,1 相册
  * @param width 目标宽度
  * @param height 目标高度
  * @param scope $scope对象
  */
 chooseSinglePicture: function(type, width, height, scope) {
  document.addEventListener("deviceready", onDeviceReady, false);
  function onDeviceReady() {
  var options = {//相机配置
   targetWidth: width,
   targetHeight: height,
   quality: 100,
   allowEdit: true
  }

  if(type == 1){//图片源设置为相册
   options.sourceType = 2;
  }

  navigator.camera.getPicture(
   function(res){
   scope.avatar_src = res;
   scope.$apply();
   localStorage.avatar = res;
   UploadFile.uploadFile(res, "我的服务器地址");//传递自己的服务器接口地址
   }, function(res){
   Toast.show("选择头像失败");
   }, options
  );
  }
 },

 /**
  * 从图库选择多张图片
  */
 choosePictures: function() {
  window.imagePicker.getPictures(function(res){
  alert(res+",success");
  }, function(res){
  alert(res+",failed");
  }, {
  maximumImagesCount: 10, 
  width: 80, 
  height: 80, 
  quality: 80 
  });
 }
 }
});

调用服务

angular.module('starter.controllers', [])
.controller('MyCtrl', function($scope, $state, $ionicActionSheet, UploadFile,Toast, SelectPicture) {
 $scope.avatar_src = "img/default_avatar.jpg";

 /**
 *选择头像
 */
 $scope.selectAvatar = function(){
 // 显示操作表
 $ionicActionSheet.show({
  buttons: [
  { text: '<p style="font-size: 18px;">拍照<p>' },
  { text: '<p style="font-size: 18px;">从相册选择<p>' },
  ],
  buttonClicked: function(index) {
  //设置头像
  SelectPicture.chooseSinglePicture(index, 120, 120, $scope);
  return true;
  }
 });
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
Sep 11 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
Aug 01 Javascript
canvas实现简易的圆环进度条效果
Feb 28 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
Oct 24 jQuery
bootstrap中的导航条实例代码详解
May 20 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
Sep 20 Javascript
element多个表单校验的实现
May 27 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 #Javascript
Vue实现数字输入框中分割手机号码的示例
Oct 10 #Javascript
JS判断数组那点事
Oct 10 #Javascript
template.js前端模板引擎使用详解
Oct 10 #Javascript
AngularJS中table表格基本操作示例
Oct 10 #Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 #Javascript
JavaScript实现计数器基础方法
Oct 10 #Javascript
You might like
PHP生成二维码的两个方法和实例
2014/07/01 PHP
php实现网站留言板功能
2015/11/04 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
js查找节点的方法小结
2015/01/13 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
javascript实现时钟动画
2020/12/03 Javascript
Python实现的rsa加密算法详解
2018/01/24 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python爬虫与反爬虫大战
2020/07/30 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
个人求职信范文分享
2014/01/06 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
2014组织生活会方案
2014/05/19 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
管理人员岗位职责
2015/02/14 职场文书
活动经费申请报告
2015/05/15 职场文书
公司考勤管理制度
2015/08/04 职场文书
zabbix配置nginx监控的实现
2022/05/25 Servers