详解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 相关文章推荐
JS之小练习代码
Oct 12 Javascript
JavaScript中出现乱码的处理心得
Dec 24 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
jquery延迟对象解析
Oct 26 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 Javascript
vue 页面跳转的实现方式
Jan 12 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多维数组转一维数组的简单实现方法
2015/12/23 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
python 如何实现遗传算法
2020/09/22 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
Tomcat的缺省是多少,怎么修改
2014/04/09 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
电气自动化大学生求职信
2013/10/16 职场文书
业务内勤岗位职责
2014/04/30 职场文书
授权委托书样本
2014/09/25 职场文书
小人国观后感
2015/06/11 职场文书
驻村工作简报
2015/07/20 职场文书
《折线统计图》教学反思
2016/02/22 职场文书