2016-01-07 46 views
1

有誰知道如何同時使用$ cordovaFileTransfer插件與離子中止下載?

我有當用戶下載文件的選項一個觀點,但我要確保,如果他們開始下載文件,但隨後按「返回」按鈕,取消下載,基本重置視圖。當下載開始和視圖留什麼似乎是發生的是,下載仍然沒有它的事,儘管我試圖做這樣的事情代碼:

// If the user leaves, check if a download is in progress. 
    // - If so, reset the variable, and remove the directory 
    $scope.$on('$ionicView.leave', function() { 
     if($scope.downloading === true) { 
     $scope.downloading = false; 

     $cordovaFile.removeRecursively(cordova.file.dataDirectory, courseDir) 
     .then(function (success) { 
     }); 
     } 
    }); 

我已經打過電話$ cordovaFileTransfer.abort()它告訴我沒有這樣的函數,即使我在插件中看到一箇中止函數本身。有沒有人對此有所瞭解,因爲我認爲這將是人們尋找的常見功能。

謝謝!

回答

1

我最終通過進入NG-cordova.js文件直接和添加abort函數像這樣解決這個問題:

我做了一個叫工廠對象的內部英尺全局變量和刪除變量實例在「下載」功能中,以使其對所有功能具有全局性。

/* globals FileTransfer: true */ 
angular.module('ngCordova.plugins.fileTransfer', []) 

    .factory('$cordovaFileTransfer', ['$q', '$timeout', function ($q, $timeout) { 
    var ft = new FileTransfer(); 
    return { 
     download: function (source, filePath, options, trustAllHosts) { 
     var q = $q.defer(); 
     var uri = (options && options.encodeURI === false) ? source : encodeURI(source); 

     if (options && options.timeout !== undefined && options.timeout !== null) { 
      $timeout(function() { 
      ft.abort(); 
      }, options.timeout); 
      options.timeout = null; 
     } 

     ft.onprogress = function (progress) { 
      q.notify(progress); 
     }; 

     q.promise.abort = function() { 
      ft.abort(); 
     }; 

     ft.download(uri, filePath, q.resolve, q.reject, trustAllHosts, options); 
     return q.promise; 
     }, 

     upload: function (server, filePath, options, trustAllHosts) { 
     var q = $q.defer(); 

     var uri = (options && options.encodeURI === false) ? server : encodeURI(server); 

     if (options && options.timeout !== undefined && options.timeout !== null) { 
      $timeout(function() { 
      ft.abort(); 
      }, options.timeout); 
      options.timeout = null; 
     } 

     ft.onprogress = function (progress) { 
      q.notify(progress); 
     }; 

     q.promise.abort = function() { 
      ft.abort(); 
     }; 

     ft.upload(filePath, uri, q.resolve, q.reject, options, trustAllHosts); 
     return q.promise; 
     }, 

     /* Here is the added abort function that will 
     kill the download or upload by calling $cordovaFileTransfer.abort() */ 
     abort: function() { 
     var q = $q.defer; 
     ft.abort(); 
     q.resolve; 
     return q.promise; 
     } 
    }; 
}]); 
+0

如果有多個下載會發生什麼? –

0

中止被添加到$ cordovaFileTransfer的下載方法的新版本,讓喜歡用沒有問題了以下工作,如果你升級你的ngcordova代碼:

var transferPromise = $cordovaFileTransfer.download(url, targetPath, {}, true); 
transferPromise.then(
    function() { },     
    function() { }, 
    function (progress) { } 
    ); 
. 
. 
. 
transferPromise.abort(); 
+0

這似乎不再是在NGCordova文件中的方法 - https://github.com/driftyco/ng-cordova/blob/master/src/plugins/fileTransfer.js –

+1

嗨,它在那裏。下載(...)返回一個承諾並放棄()添加到該承諾。檢查線25 – Sep

+0

我不能得到這個工作 - 做 - $ cordovaFileTransfer.fileDownloading = $ cordovaFileTransfer.download(FULLPATH,路徑選擇,trustHosts) 。然後((函數(結果){})(函數(錯誤){}),函數(progress){},false); 然後再調用$ cordovaFileTransfer.fileDownloading.abort()說沒有功能 - 也許我正在處理承諾 - 並返回此... –