详解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的分页控件(C#)
Jan 06 Javascript
文字不间断滚动(上下左右)实例代码
Apr 21 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
自定义百度分享的分享按钮
Mar 18 Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 Javascript
vue实现选项卡及选项卡切换效果
Apr 24 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 Javascript
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
微信小程序登录session的使用
Mar 17 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 Javascript
vue单元格多列合并的实现
Nov 26 Vue.js
防止页面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过滤表单提交的html等危险代码
2014/11/03 PHP
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
Python基础教程之异常详解
2019/01/10 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
汽车4S店销售经理岗位职责
2015/04/02 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书