ngCordova $cordovaFileTransfer - 如何中止下载?中止()是未定义的
ngCordova $cordovaFileTransfer - how to abort a download? abort() is undefined
有谁知道如何在使用带 ionic 的 $cordovaFileTransfer 插件时中止下载?
我有一个视图,用户可以选择下载文件,但我想确保如果他们开始下载文件,然后按下 "back" 按钮,它会取消下载并基本上重置视图。似乎正在发生的事情是,当下载开始并离开视图时,下载仍然在做它的事情,即使我试图在代码中做这样的事情:
// 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() 并且它告诉我没有这样的函数,即使我在插件本身中看到了一个中止函数。有没有人对此有任何见解,因为我觉得这将是人们正在寻找的一项常见功能。
谢谢!
我最终通过直接进入 ng-cordova.js 文件并添加中止函数解决了这个问题,如下所示:
我在工厂对象中创建了一个名为 ft 的全局变量,并删除了 "download" 函数中的变量实例化,以使其对所有函数都是全局变量。
/* 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;
}
};
}]);
新版本的 $cordovaFileTransfer 下载方法添加了 Abort,因此如果您升级 ngcordova,像下面这样的代码可以正常工作:
var transferPromise = $cordovaFileTransfer.download(url, targetPath, {}, true);
transferPromise.then(
function () { },
function () { },
function (progress) { }
);
.
.
.
transferPromise.abort();
有谁知道如何在使用带 ionic 的 $cordovaFileTransfer 插件时中止下载?
我有一个视图,用户可以选择下载文件,但我想确保如果他们开始下载文件,然后按下 "back" 按钮,它会取消下载并基本上重置视图。似乎正在发生的事情是,当下载开始并离开视图时,下载仍然在做它的事情,即使我试图在代码中做这样的事情:
// 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() 并且它告诉我没有这样的函数,即使我在插件本身中看到了一个中止函数。有没有人对此有任何见解,因为我觉得这将是人们正在寻找的一项常见功能。
谢谢!
我最终通过直接进入 ng-cordova.js 文件并添加中止函数解决了这个问题,如下所示:
我在工厂对象中创建了一个名为 ft 的全局变量,并删除了 "download" 函数中的变量实例化,以使其对所有函数都是全局变量。
/* 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;
}
};
}]);
新版本的 $cordovaFileTransfer 下载方法添加了 Abort,因此如果您升级 ngcordova,像下面这样的代码可以正常工作:
var transferPromise = $cordovaFileTransfer.download(url, targetPath, {}, true);
transferPromise.then(
function () { },
function () { },
function (progress) { }
);
.
.
.
transferPromise.abort();