详解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 相关文章推荐
5秒后跳转效果(setInterval/SetTimeOut)
May 03 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
Feb 04 Javascript
js实现class样式的修改、添加及删除的方法
Jan 20 Javascript
jQuery右下角旋转环状菜单特效代码
Aug 10 Javascript
理解Angular数据双向绑定
Jan 10 Javascript
浅析$(function) ready和onload 的区别
Sep 03 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
Nov 25 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
微信小程序实用代码段(收藏版)
Dec 17 Javascript
jQuery AJAX应用实例总结
May 19 jQuery
JS实现九宫格拼图游戏
Jun 28 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 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
PHP加密解密函数详解
2015/10/28 PHP
php生出随机字符串
2017/07/06 PHP
PDO::commit讲解
2019/01/27 PHP
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python连接phoenix的方法示例
2017/09/29 Python
Python找出最小的K个数实例代码
2018/01/04 Python
python如何重载模块实例解析
2018/01/25 Python
Python实现自动上京东抢手机
2018/02/06 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
Python自省及反射原理实例详解
2020/07/06 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
小学教研工作制度
2014/01/15 职场文书
便利店投资创业计划书
2014/02/08 职场文书
实习推荐信
2014/05/10 职场文书
如何写求职信
2014/05/24 职场文书
学雷锋宣传标语
2014/06/25 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
导游词之五台山
2019/10/11 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL