详解ionic本地相册、拍照、裁剪、上传单图完全版

网络上已有的ionic图片选择上传博客碎片化过于严重,功能残缺或者引入了一些不必要的插件。这次以项目为契机,把ionic的图片选择、裁剪、上传整合一下,多图上传请戳图片上传

插件安装

rush:js;"> cordova plugin add cordova-plugin-camera //用于通过相机、相册选择图片并完成裁剪 cordova plugin add cordova-plugin-file-transfer //用于上传图片到服务器

功能封装为服务

rush:js;"> 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",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
    });
    }
    }
    });

调用服务

rush:js;"> 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;">拍照

' },{ text: '<p style="font-size: 18px;">从相册选择

' },],buttonClicked: function(index) {
//设置头像
SelectPicture.chooseSinglePicture(index,120,$scope);
return true;
}
});
}
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据...
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:...
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面