详解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 相关文章推荐
jQuery对表单的操作代码集合
Apr 06 Javascript
Ubuntu 11.10 安装Node.js的方法
Nov 30 Javascript
JQuery 中几个类选择器的简单使用介绍
Mar 14 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 Javascript
JQuery标签页效果实例详解
Dec 24 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
Jun 16 Javascript
JS多文件上传的实例代码
Jan 11 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
Aug 18 jQuery
JS实现前端页面的搜索功能
Jun 12 Javascript
Vue如何使用混合Mixins和插件开发详解
Feb 05 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
laravel自定义分页效果
2017/07/23 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
Python算术运算符实例详解
2017/05/31 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python数组循环处理方法
2019/08/26 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
python 读取二进制 显示图片案例
2020/04/24 Python
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
英国综合网上购物商城:The Hut
2018/07/03 全球购物
恶搞卫生巾广告词
2014/03/18 职场文书
给校长的建议书100字
2014/05/16 职场文书
新学期开学演讲稿
2014/05/24 职场文书
学前班学生评语
2014/12/29 职场文书
文艺委员竞选稿
2015/11/19 职场文书
《司马光》教学反思
2016/02/22 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
2019新员工心得体会
2019/06/25 职场文书
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android