详解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插件分享之分页插件jqPagination
Jun 06 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
Nov 13 Javascript
怎么引入(调用)一个JS文件
May 26 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
JS正则子匹配实例分析
Dec 22 Javascript
详解webpack 多入口配置
Jun 16 Javascript
详解使用vue-admin-template的优化历程
May 20 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
video.js 实现视频只能后退不能快进的思路详解
Aug 09 Javascript
微信小程序 JS动态修改样式的实现方法
Dec 16 Javascript
对Layer弹窗使用及返回数据接收的实例详解
Sep 26 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版(1)
2006/10/09 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
如何使用php实现评委评分器
2015/07/31 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
清除输入框内的空格
2016/12/21 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
Python XML RPC服务器端和客户端实例
2014/11/22 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
德国网上药房:Apotal
2017/04/04 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
晚归检讨书
2014/02/19 职场文书
规范化管理年活动总结
2014/08/29 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS