如何使用 dojo 在不冻结浏览器的情况下下载文件

How to download file without freezing the browser using dojo?

本文关键字:情况下 下载 文件 浏览器 冻结 何使用 dojo      更新时间:2023-09-26

就是这样。

我正在使用一个弹簧 MVC 控制器,它从服务字节 Bean 获取以字节 [] 为单位的文件。该服务只是从磁盘读取文件。

到目前为止没问题,我只需要将字节[]写入响应正文并手动设置响应内容类型。(这里没有问题,或者我错过了什么)。

我的

疑问来自我的javascript代码。我正在使用道场 1.7.2。做一个快速的研究 似乎我可以使用dojo.io.IFrame来实现"异步"下载行为。

道场有没有其他方法可以做到这一点?还是IFrame是要走的路?

此外,有关此主题的任何建议将不胜感激。

function downloadExcel(urlParm){        
    var xhr = new XMLHttpRequest();
    xhr.open('POST', urlParm);
    xhr.responseType = 'blob';
    xhr.send();   
    xhr.onreadystatechange = function(){
        if (xhr.readyState == 4){
            // $.unblockUI();
            if(xhr.status == 200) {
                var blob = new Blob([xhr.response], { type: 'application/vnd.ms-excel' });
                if (navigator.msSaveOrOpenBlob)
                    navigator.msSaveOrOpenBlob(blob, 'excelFile1.xls');
                else {
                    var link = document.createElement('a');                     
                    var URL = window.URL || window.webkitURL;
                    var downloadUrl = URL.createObjectURL(blob);
                    link.href = downloadUrl;
                    link.style = "display: none";
                    link.download = 'excelFile1.xls';
                    document.body.appendChild(link);
                    link.click();
                    setTimeout(function(){
                        document.body.removeChild(link);
                        window.URL.revokeObjectURL(downloadUrl);  
                    }, 100);
                }
            }
            else
                alert("HTTP return status: " + xhr.status);
        }            
    }
}
相关文章: