js 關於下載文件如何判斷是否下載成功


最近在做的一個項目碰到一個問題,就是需要檢測什么時候導出成功並根據導出成功進行提示操作。開始是直接使用location.href,但是無法檢測到是否下載成功。

經過查找資料下載文件使用iframe可以做到,但是onload可以檢測到頁面加載 成功,無法檢測到下載加載成功。經過搜索資料發現一個解決,方案。原理如下:

在點擊下載按鈕時獲得一個時間戳並把時間戳發送給后台,后台響應成功后把發送的時間戳設置為cookie值,前端實時監測cookie值和前端的時間戳是否相等,相等就說明文件下載成功。

 

    function exportExcelForm(obj){
            var timer,flag=0;
            var _self=obj._self;
            var downloadToken=obj.time,
                    url=obj.url,
                    triggerDelay = 1000;
            _self.classList.add('disabled');
            _self.innerHTML='導出中...';
            timer=setTimeout(function() {
                function checkToken(){
                    var timerll=setInterval(function(){
                        var sertoken=getCookie(obj.key);
                        if(sertoken&&(sertoken==downloadToken)){
                            clearTimeout( downloadTimer );
                            clearInterval( timerll );
                            frame.remove();
                            _self.classList.remove('disabled');
                            _self.innerHTML=obj.text;
                            clearCookie(obj.key);
                            flag=0;
                        }else if(sertoken){
                            alert(obj.text+'失敗');
                            clearTimeout( downloadTimer );
                            clearInterval( timerll );
                            clearCookie(obj.key);
                            _self.classList.remove('disabled');
                            _self.innerHTML=obj.text;
                        }
                    },100);
                }
                if(!flag){
                    flag=1;
                    var frame=$('<iframe />').attr('src', url).attr('id','iframe_download_report').hide().appendTo('body');
                    var downloadTimer=setTimeout(checkToken,1000);
                }

            }, triggerDelay);
        }
      
    $('#exportNewStock').on('click',function(){
                var _self=this;
                var downloadToken=+new Date();
                var url =maochao+'stock/exportFinalStockExcelAllotNew.xlsx?brandname='+brandName+'&statisticsdate='+time+'&stockoutDay='+ditchCode+'&value='+downloadToken;
                var obj={
                    _self:_self,
                    time:downloadToken,
                    url:url,
                    text:'導出新倉調撥模板',
                    key:'excel_new'
                }
                exportExcelForm(obj);
            });
 
         

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM