详解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和注册表脚本实现右键收藏Web页选中文本
Jan 28 Javascript
AngularJS辅助库browserTrigger用法示例
Nov 03 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
Aug 27 Javascript
js实现显示手机号码效果
Mar 09 Javascript
JavaScript创建对象_动力节点Java学院整理
Jun 27 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
Jul 05 Javascript
vue封装第三方插件并发布到npm的方法
Sep 25 Javascript
Vue组件化开发思考
Feb 02 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
Sep 20 Javascript
使用Vue实现简单计算器
Feb 25 Javascript
JS实现滑动拼图验证功能完整示例
Mar 29 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
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利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
php定界符
2014/06/19 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
python 异常处理总结
2016/10/18 Python
python分析作业提交情况
2017/11/22 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
python序列化与数据持久化实例详解
2019/12/20 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
求职信范文英文版
2014/01/05 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
新春寄语大全
2014/04/09 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
小平您好观后感
2015/06/09 职场文书