美文网首页
ionic2实现图片下载

ionic2实现图片下载

作者: 洗耳恭听_kai | 来源:发表于2019-01-10 17:02 被阅读11次
日常开头图片系列

cordova-plugin-file-transfer

这个插件,前面的一篇中介绍了多图片上传,也用到了这个插件,下载图片也会用到这个插件,官方链接戳这里

download

前面有一个文章说的是另一个插件保存图片到相册的,但那种保存图片的速度很慢,目前还没有找到是什么原因,但现在这个插件保存图片很快,下面来说具体怎么用这个插件。

同样的,需要安装插件:

  • ionic plugin add cordova-plugin-file-transfer@1.7.1
  • ionic plugin add cordova-plugin-file@4.3.3

添加到config.xml中:

<plugin name="cordova-plugin-file" spec="~4.3.3"/>
<plugin name="cordova-plugin-file-transfer" spec="~1.7.1"/>

HTML

<div class="ps_icon ps_dl_ico" ng-click="download(series_picture)"></div>

JS

.controller('Photo_showCtrl', ['$rootScope', '$scope', '$state', '$location', '$timeout', '$ionicHistory', '$ionicModal', '$ionicPopover', '$cordovaBarcodeScanner', 'Util', 'StringUtil', 'ClientOpt', 'MyDialog', '$ionicNativeTransitions','$filter','$q',
        function ($rootScope, $scope, $state, $location, $timeout, $ionicHistory, $ionicModal, $ionicPopover, $cordovaBarcodeScanner, Util, StringUtil, ClientOpt, MyDialog, $ionicNativeTransitions, $filter, $q) {
            //这里我删除了其他的代码,只保留了下载的相关代码,实际项目中,有其他的代码,如数据加载等,因为后面我们传来的图片地址也是在加载后才有的;上面的函数中需加上:'$ionicNativeTransitions','$filter','$q',$ionicNativeTransitions, $filter, $q,且顺序只能在其他的后面
            $scope.download=function(series_picture){
                MyDialog.confirm("保存提示","确定要保存图片到本地吗?","是的","按错了",function () {
                    $scope.fullPath="file:///tplus";
                    $scope.downloadFile(series_picture);
                });
            }
            $scope.downloadFile=function(fileUrl) {
                $scope.onDeviceReady().then(function(){
                    var ft = new FileTransfer();
                    var uri = encodeURI(fileUrl);
                    var fileURL = $scope.fullPath + uri.substr(uri.lastIndexOf('/') + 1);
                    ft.onprogress = function(progressEvent) {
                        if (progressEvent.lengthComputable) {
                            console.log("当前进度:"+progressEvent.loaded / progressEvent.total);
                        }
                        MyDialog.showProgress(progressEvent);
                    };
                    ft.download(
                        uri,
                        fileURL,
                        function() {
                            MyDialog.hideProgress();
                            MyDialog.tip("保存成功,保存在目录tplus下",2000);
                        },
                        function(error) {
                            MyDialog.tip("download error source " + error.source);
                            console.log("download error source " + error.source);
                            console.log("download error target " + error.target);
                            console.log("upload error code" + error.code);
                        },
                        false,
                        {
                            headers: {
                                "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
                            }
                        }
                    );
                });
            }
            //下面是检查和创建相册文件夹的操作
            $scope.onDeviceReady=function() {
                var q = $q.defer();
                try {
                    window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function (fileSystem) {
                        fileSystem.getDirectory("tplus",  {
                            create: true,
                            exclusive: false
                        }, function (result) {
                            $scope.fullPath = result.toURL();
                            q.resolve(result);
                        }, function (error) {
                            MyDialog.tip(error.message);
                            q.reject(error);
                        });
                    }, function (err) {
                        MyDialog.tip(err.message);
                        q.reject(err.message);
                    });
                }
                catch (e) {
                    MyDialog.tip(e.message);
                    q.reject(e);
                }
                return q.promise;
            }
        }])

关于进度和弹出确认框的相关代码:

showProgress:function(downloadProgress){
                if(!$rootScope.isProgressShow){
                    $ionicBackdrop.retain();
                    $rootScope.isProgressShow=true;
                }
                $rootScope.progress_v.showProgress=true;
                $rootScope.progress_v.progress=downloadProgress;
}

hideProgress:function(){
    $ionicBackdrop.release();
    $rootScope.progress_v.showProgress=false;
    $rootScope.isProgressShow=false;
}

confirm:function(title,msg,okText,cancelText,okFunc,cancelFunc){
                $ionicPopup.confirm({
                    title: '<a class="picon ion-help-circled"></a><span>'+title+'</span>',
                    template: msg,
                    cancelText:StringUtil.isEmpty(cancelText)?"关闭":cancelText,
                    okText:StringUtil.isEmpty(okText)?"确定":okText
                }).then(function(res) {
                    if(res) {
                        if(!StringUtil.isEmpty(okFunc))
                            okFunc();
                    } else {
                        if(!StringUtil.isEmpty(cancelFunc))
                            cancelFunc();
                    }
                });
}

到此,下载图片的功能就做好了。

相关文章

网友评论

      本文标题:ionic2实现图片下载

      本文链接:https://www.haomeiwen.com/subject/roiarqtx.html