ionic本地相冊、拍照、裁剪、上傳(單圖完全版)

原文出處:https://blog.csdn.net/u013007703/article/details/53196091

延伸閱讀:Ionic2中的相冊選擇和拍照上傳——ImgService

 

網絡上已有的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: '拍照' },
        { text: '從相冊選擇' }
      ],
      buttonClicked: function(index) {
         //設置頭像
         SelectPicture.chooseSinglePicture(index, 120, 120, $scope);
         return true;
      }
    });
  }
})

閆斌(BeanYon)
--------------------- 
作者:閆斌_BeanYon 
來源:CSDN 
原文:https://blog.csdn.net/u013007703/article/details/53196091 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章