ionic1 調(diào)用文件管理器上傳/打開文件

1. 相關(guān)插件

文件管理器
cordova plugin add cordova-plugin-filechooser
路徑轉(zhuǎn)換
cordova plugin add cordova-plugin-filepath
文件讀寫
cordova plugin add cordova-plugin-file
上傳文件
cordova plugin add cordova-plugin-file-transfer
打開文件
cordova plugin add https://github.com/JuanjoPP/cordova-plugin-file-opener2
gradle版本跟crosswalk產(chǎn)生沖突,安裝兼容插件
cordova plugin add cordova-android-support-gradle-release --variable ANDROID_SUPPORT_VERSION=24.+

2. 返回文件路徑的兩種形式

// 安卓 7.0以上文件路徑以 'content' 開頭挨决,7.0 下以 'file' 開頭
// 轉(zhuǎn)換前的路徑
content://media/external/file/306905

// 轉(zhuǎn)換后的路徑
file:///storage/emulated/0/測試文件.docx

3. 代碼部分

server.js
  // 轉(zhuǎn)換文件路徑
  .service('resolveFileService', function (openFileService, $rootScope) {

    // 打開文件
    function openFile(path) {
      var fileType = path.substring(path.lastIndexOf(".") + 1, path.length); // 文件名后綴
      openFileService.openFile(path, fileType);
    };

    // 文件路徑轉(zhuǎn)換,統(tǒng)一成file開頭的文件路徑
    function resolveUrl(newUrl, type) {
      window.FilePath.resolveNativePath(newUrl, function (path) {
        if (type === 'open') {
          openFile(path);
        } else if (type === 'upload') {
          return path;
        }
      }, function (err) {
        console.log(err);
      });
    };

    /**
     * 打開文件管理器,選擇上傳文件
     * type 區(qū)分類型  'open' 打開文件芽世,'upload' 上傳文件
     * url 選擇文件后返回的路徑
     */
    this.fileChooser = function (type) {
      return fileChooser.open(function (url) {
        var path = decodeURI(url);
        var isExist = path.indexOf('content'); // 安卓 7.0以上文件路徑以 'content' 開頭齐佳,7.0 下以 'file' 開頭
        if (isExist != -1) {
          resolveUrl(path, type);
        } else {
          if (type === 'open') {
            openFile(path);
          } else if (type === 'upload') {
            $rootScope.uploadSendEmail(path);   // 上傳文件
          }
        }
      }, function (err) {
        console.log(err);
      });
    }

    

  })

  // 打開文件
  .service('openFileService', function ($cordovaFileOpener2) {

    function getFileMimeType(fileType) {
      var mimeType = '';
      switch (fileType) {
        case 'txt':
          mimeType = 'text/plain';
          break;
        case 'docx':
          mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
          break;
        case 'doc':
          mimeType = 'application/msword';
          break;
        case 'pptx':
          mimeType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
          break;
        case 'ppt':
          mimeType = 'application/vnd.ms-powerpoint';
          break;
        case 'xlsx':
          mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
          break;
        case 'xls':
          mimeType = 'application/vnd.ms-excel';
          break;
        case 'zip':
          mimeType = 'application/x-zip-compressed';
          break;
        case 'rar':
          mimeType = 'application/octet-stream';
          break;
        case 'pdf':
          mimeType = 'application/pdf';
          break;
        case 'apk':
          mimeType = 'application/vnd.android.package-archive';
          break;
        case 'jpg':
          mimeType = 'image/jpeg';
          break;
        case 'png':
          mimeType = 'image/png';
          break;
        default:
          mimeType = 'application/' + fileType;
          break;
      }
      return mimeType;
    }

    // 打開文件
    this.openFile = function (path, type) {
      $cordovaFileOpener2.open(path, getFileMimeType(type)).then(function (res) {
        // 成功
        console.log(res);

      }, function (err) {
        console.log(err);
        // 錯(cuò)誤
      });
    }

  })

controller.js

    // 上傳文件
    $scope.postUploadFile = function () {
      resolveFileService.fileChooser('upload');   // 'open' 打開文件重付,'upload' 上傳文件
    };

    //圖片上傳
    $rootScope.uploadSendEmail = function (path) {
      console.log(path);
      var filename = path.split("/0/").pop();
      var mimeType = path.split(".").pop();
      var targetPath = cordova.file.externalRootDirectory + filename; //APP下載存放的路徑,可以使用cordova file插件進(jìn)行相關(guān)配置
      var url = encodeURI(intraHost + "/OA/postUploadFile");
      var trustHosts = true;
      var options = {
        // fileKey: 'file',
        mimeType: mimeType,
        fileName: filename,
      };
      $ionicLoading.show({
        template: "正在上傳..."
      });
      $cordovaFileTransfer.upload(url, targetPath, options, trustHosts)
        .then(function (result) {
          console.log(result);
          $ionicLoading.hide();
          $cordovaToast.showShortBottom('上傳成功');

        }, function (err) {
          console.log(err);
          $ionicLoading.hide();
          $cordovaToast.showShortBottom('上傳失敗');
        }, function (progress) {
          $timeout(function () {
            var downloadProgress = (progress.loaded / progress.total) * 100;
            $ionicLoading.show({
              template: "已上傳:" + Math.floor(downloadProgress) + "%",
            });
            if (downloadProgress > 99) {
              $ionicLoading.show({
                template: "已上傳:100%",
              });
            }
          })
        });
    };
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滔驾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俄讹,更是在濱河造成了極大的恐慌哆致,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颅悉,死亡現(xiàn)場離奇詭異沽瞭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剩瓶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門驹溃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人延曙,你說我怎么就攤上這事豌鹤。” “怎么了枝缔?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵布疙,是天一觀的道長。 經(jīng)常有香客問我愿卸,道長灵临,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任趴荸,我火速辦了婚禮儒溉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘发钝。我一直安慰自己顿涣,他們只是感情好波闹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涛碑,像睡著了一般精堕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒲障,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天歹篓,我揣著相機(jī)與錄音,去河邊找鬼晌涕。 笑死滋捶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的余黎。 我是一名探鬼主播重窟,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惧财!你這毒婦竟也來了巡扇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤垮衷,失蹤者是張志新(化名)和其女友劉穎厅翔,沒想到半個(gè)月后翔曲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體者吁,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年团赏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仰迁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甸昏。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖徐许,靈堂內(nèi)的尸體忽然破棺而出施蜜,到底是詐尸還是另有隱情,我是刑警寧澤雌隅,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布翻默,位于F島的核電站,受9級(jí)特大地震影響恰起,放射性物質(zhì)發(fā)生泄漏修械。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一检盼、第九天 我趴在偏房一處隱蔽的房頂上張望祠肥。 院中可真熱鬧,春花似錦、人聲如沸仇箱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剂桥。三九已至,卻和暖如春属提,著一層夾襖步出監(jiān)牢的瞬間权逗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工冤议, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斟薇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓恕酸,卻偏偏與公主長得像堪滨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕊温,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • 四袱箱、MES服務(wù)端部分 4.1 開發(fā)環(huán)境 jdk1.8+SpringBoot 2.1.1 + MyBatis3.4....
    戎碼一生12138閱讀 338評(píng)論 0 0
  • 《改變—問題形成和解決的原則》 第3編 問題的解決 ● 第9章 改變的實(shí)踐 無創(chuàng)造力的心靈能指認(rèn)出錯(cuò)的答案,但要...
    晾晾媽媽310閱讀 530評(píng)論 0 0
  • 盼一縷涼風(fēng) 掠過七月的結(jié)尾 在田里揮汗如雨 抬頭時(shí)神清氣爽 念一片落葉 劃過窗角的瞬間 畫紙上的少年 低頭把微笑拈...
    棲梧小鳳閱讀 120評(píng)論 0 0
  • 一直都有一個(gè)念想,希望在老了的時(shí)候能抱著一大框的信件在某個(gè)慵懶的午后小心翼翼地將其拆開凉翻,瞥著老花眼逐句逐句地回味曾...
    一周陪你讀一本書閱讀 1,221評(píng)論 7 12
  • 蒼蠅蚊子不要管了讨,定力不夠,會(huì)起憎恨心制轰, 放下障礙我們的前计,名利之心,執(zhí)著名利艇挨,在人面前刻意表現(xiàn)自己残炮,愛面子,怕別人說...
    阿新_9483閱讀 92評(píng)論 0 0