ionic更換頭像

參考 http://blog.csdn.net/haozhoupan/article/details/49814631
首先聲明的是圖片我是上傳到服務器的Tomcat中郎笆,并保存路徑在數(shù)據(jù)庫中

第1步 安裝插件

1.1 安裝cordovaCamera

這個插件是用來拍照今瀑,或者說是打開手機上面的照相機功能的
DOS進入項目
Ionic plugin add cordova-plugin-camera

1.2 安裝cordovaFileTransfer

這個插件是上傳文件用的 ionic plugin add cordova-plugin-file-transfer

第2步.編寫頁面代碼

  <div style="width:70px;height:70px;margin-left:auto;margin-right: auto;margin-top:5%;border-radius:5px;" ng-click="addPhoto();">
      ![](img/imgs/username.png)
      <img ng-if="user.image!=1" src={{user.image}} style="width:60px;height:60px;margin-left:-15%;margin-top:2%" >
    </div>

其中: addPhoto()是鏈接JS中寫的圖片上傳方法
Img中的ng-if是判斷用戶是否修改了頭像懒震,若從沒修改過就給一個默認的頭像鳄厌,頭像修改過就顯示修改后的圖片

第3步JS代碼

3.1 在.controller中注入相關服務

$ionicActionSheet, $cordovaCamera, $cordovaFileTransfer

3.2 編寫下面JS代碼

  // 添加圖片
    $scope.addPhoto = function () {
      $ionicActionSheet.show({
        /* cancelOnStateChange: true,
         cssClass: 'action_s',*/
        titleText: "請選擇獲取圖片方式",
        buttons: [{
          text: '<b>拍照</b> 上傳'
        }, {
          text: '從 <b>相冊</b> 中選'
        }],
        cancelText: '取消',
        cancel: function () {
          return true;
        },
        buttonClicked: function (index) {
          switch (index) {
            case 0:
              $scope.takePhoto();
              break;
            case 1:
              $scope.pickImage();
              break;
            default:
              break;
          }
          return true;
        }
      });
    };
    //拍照
    $scope.takePhoto = function () {
      var options = {
        quality: 100,
        destinationType: Camera.DestinationType.FILE_URI,//Choose the format of the return value.
        sourceType: Camera.PictureSourceType.CAMERA,//資源類型:CAMERA打開系統(tǒng)照相機;PHOTOLIBRARY打開系統(tǒng)圖庫
        targetWidth: 150,//頭像寬度
        targetHeight: 150//頭像高度
      };
      $cordovaCamera.getPicture(options)
        .then(function (imageURI) {
          //Success
          $scope.imageSrc = imageURI;
          //$scope.uploadPhoto();
          var confirmPopup = $ionicPopup.confirm({
            title: '<strong>提示</strong>',
            template: '確認更新頭像?',
            okText: '確認',
            cancelText: '取消'
          });
          confirmPopup.then(function (res) {
            $scope.uploadPhoto();//調(diào)用上傳功能
          })
        }, function (err) {
          // Error
        });
    };
//選擇照片
    $scope.pickImage = function () {
      var options = {
        maximumImagesCount: 1,
        quality: 100,
        destinationType: Camera.DestinationType.FILE_URI,//Choose the format of the return value.
        sourceType: Camera.PictureSourceType.SAVEDPHOTOALBUM,//資源類型:CAMERA打開系統(tǒng)照相機拼缝;PHOTOLIBRARY打開系統(tǒng)圖庫
        targetWidth: 150,//頭像寬度
        targetHeight: 150//頭像高度
      };

      $cordovaCamera.getPicture(options)
        .then(function (imageURI) {
          //Success
          $scope.imageSrc = imageURI;
          // $scope.imageSrc= imageURI.substring(0,imageURI.lastIndexOf("?"));//獲取手機上的圖片可能后面出現(xiàn)娱局?時間戳
          // $scope.uploadPhoto();
          var confirmPopup = $ionicPopup.confirm({
            title: '<strong>提示</strong>',
            template: '確認更新頭像?',
            okText: '確認',
            cancelText: '取消'
          });
          confirmPopup.then(function (res) {
            $scope.uploadPhoto();//調(diào)用上傳
          })
        }, function (err) {
          // Error
        });
    };


    $scope.uploadPhoto = function () {
      // var requestParams = "?callback=JSON_CALLBACK";
      var options = new FileUploadOptions();
      var server = encodeURI('注意這寫的是你的后臺請求地址');
      var fileURL = $scope.imageSrc;
      alert("1 fileURL= "+fileURL);
      var params = {
        fileKey: "file",//相當于form表單項的name屬性
        fileName: fileURL.substr(fileURL.lastIndexOf('/') + 1),
        mimeType: "image/jpeg",
        chunkedMode : true,
        id:$scope.user.id
      };
      options.params = params;
      //alert("2 options.fileKey = " +options.params.fileKey+" 3fileName= "+options.params.fileName);
      $cordovaFileTransfer.upload(server, fileURL, options)
        .then(function (result) {
          // Success!
          //alert("Code = " + result.responseCode + "Response = " + result.response+ "Sent = " + result.bytesSent);
         alert("頭像更換成功!咧七!");
        }, function (err) {
          // Error
          alert("An error has occurred: Code = " + error.code + "upload error source " + error.source + "upload error target " + error.target);
        }, function (progress) {
          // constant progress updates
        });

    };

第4步 編寫后臺代碼

在此以springMVC中的controller作為后臺

@ResponseBody
    @RequestMapping(value = "saveFile", method = { RequestMethod.GET, RequestMethod.POST })
    public void saveFile(@RequestParam("file") MultipartFile[] mFiles,String fileName,String id) throws MalformedURLException {
         
        String targetDirectory = "D:\\apache-tomcat-8.0.9\\webapps\\hy\\image"; //保存在服務器上的tomcat中路徑
        System.err.println("filename= "+fileName+" 用戶id= "+id);//得到參數(shù)文件名和用戶id
    
          if(mFiles.length==0|| mFiles==null){
              return  ;
          }else{
              if(fileName.contains("?")){
                 fileName = fileName.substring(0, fileName.indexOf("?"));               
              }
              for(MultipartFile mFile : mFiles){
                    //String fileName = mFile.getOriginalFilename();//重名圖片的覆蓋問題
                    File targetFile = new File(targetDirectory, fileName);
                    if (!targetFile.exists()) {
                        targetFile.mkdirs();
                    }
                    
                    try {
                        mFile.transferTo(targetFile);
                        UserCenterDTO user = new UserCenterDTO();
                        String path = targetFile.getPath();
                        user.setImage(fileName);
                        user.setUid(id);
                        int a= userService.updateImage(user);
                    } catch (IllegalStateException isEx) {
                        isEx.printStackTrace();
                    } catch (IOException ioEx) {
                        ioEx.printStackTrace();
                    }
                 }
         }
          
    }

但是這樣會報MultipartResolver錯誤衰齐,所以在上面代碼之上加上以下代碼:

@Bean
        public MultipartResolver multipartResolver() {
            CommonsMultipartResolver resolver = new CommonsMultipartResolver();
            resolver.setMaxUploadSize(10000000);
            return resolver;
        }

附上結(jié)果圖:

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市继阻,隨后出現(xiàn)的幾起案子娇斩,更是在濱河造成了極大的恐慌仁卷,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犬第,死亡現(xiàn)場離奇詭異锦积,居然都是意外死亡,警方通過查閱死者的電腦和手機歉嗓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門丰介,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鉴分,你說我怎么就攤上這事哮幢。” “怎么了志珍?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵橙垢,是天一觀的道長。 經(jīng)常有香客問我伦糯,道長柜某,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任敛纲,我火速辦了婚禮喂击,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淤翔。我一直安慰自己翰绊,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布旁壮。 她就那樣靜靜地躺著监嗜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抡谐。 梳的紋絲不亂的頭發(fā)上秤茅,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音童叠,去河邊找鬼。 笑死课幕,一個胖子當著我的面吹牛厦坛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乍惊,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼杜秸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了润绎?” 一聲冷哼從身側(cè)響起撬碟,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诞挨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呢蛤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惶傻,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年其障,在試婚紗的時候發(fā)現(xiàn)自己被綠了银室。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡励翼,死狀恐怖蜈敢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汽抚,我是刑警寧澤抓狭,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站造烁,受9級特大地震影響否过,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膨蛮,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一叠纹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敞葛,春花似錦誉察、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氨肌,卻和暖如春鸿秆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怎囚。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工卿叽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恳守。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓考婴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親催烘。 傳聞我的和親對象是個殘疾皇子沥阱,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • ionic是一個運行在webview上的應用,但是很多功能js搞不定伊群,免不了本地代碼的支持考杉。ionic在nativ...
    李澤1988閱讀 3,043評論 0 3
  • 前言:用cordova開發(fā)hybrid app的過程中策精,由于是html5開發(fā)的app,在手機上很多權限受限制...
    京東內(nèi)部優(yōu)惠券閱讀 5,383評論 5 65
  • 簡介 關于Cordova的熱更新問題崇棠,國內(nèi)的資料比較少咽袜,許多博客上都是胡亂的抄襲,準確性極低易茬,無任何實用性酬蹋,并且步...
    cl9000閱讀 6,348評論 10 15
  • 望著窗外,今天天空間斷下著雨抽莱,地面都是濕漉漉的范抓,這的確不算是一個好的天氣。 但對我而言食铐,這樣的天氣與往常并沒有什么...
    那年的花開閱讀 608評論 0 0