详解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 02 Javascript
js 判断 enter 事件
Feb 12 Javascript
javascript 日历提醒系统( 兼容所有浏览器 )
Apr 07 Javascript
javascript温习的一些笔记 基础常用知识小结
Jun 22 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
webpack+vue.js实现组件化详解
Oct 12 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
react-router中的属性详解
Jun 01 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 Javascript
微信小程序设置滚动条过程详解
Jul 25 Javascript
Vue组件跨层级获取组件操作
Jul 27 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中数据的批量导入(csv文件)
2006/10/09 PHP
PHP文件下载类
2006/12/06 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php实现微信发红包
2015/12/05 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
php 猴子摘桃的算法
2017/06/20 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
FF IE兼容性的修改小结
2009/09/02 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
简单实现node.js图片上传
2016/12/18 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
Python数据类型之String字符串实例详解
2019/05/08 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
jupyter notebook 多行输出实例
2020/04/09 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
年度考核评语
2014/01/19 职场文书
有关爱国演讲稿
2014/05/07 职场文书
工地安全标语
2014/06/07 职场文书
体育教师求职信
2014/06/30 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
加强党性修养心得体会
2016/01/21 职场文书