首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从IE11下载文档后无法加载pdf文档

从IE11下载文档后无法加载pdf文档
EN

Stack Overflow用户
提问于 2021-01-18 21:59:10
回答 1查看 773关注 0票数 0

我有一个ajax调用,我调用JSReport并下载pdf文档。在chrome和其他浏览器中,它可以正常工作。文档已下载,我可以打开它。但是在IE11中,文档是下载的,但是如果我想打开pdf文件,它总是显示failed to load pdf document。我在IE11控制台中调试了代码,但它没有给出任何错误。这是我的代码,

代码语言:javascript
复制
$.ajax({
                url: 'my api url',
                headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },
                type: 'POST',
                data: JSON.stringify(selectedIds),
                success: function (data) {
                    var a = document.createElement('a');
                    var isIE = false || !!document.documentMode;
                    
                    if (!isIE) {
                        // This part is working properly
                        for (var i = 0; i < data.length; i++) {
                            a.href = "data:application/octet-stream;base64," + data[i];
                            a.target = '_blank';
                            a.download = 'report.pdf';
                            a.click();
                        }
                    } else {
                        // This part is for IE11 browser where I have problem to load the document after download
                        for (var i = 0; i < data.length; i++) {
                            var file = new Blob([data[i]], {
                                type: 'application/octet-stream'
                            });
                            window.navigator.msSaveOrOpenBlob(file, 'report.pdf');
                        }
                    }
                    
                },
                fail: function (jqXHR, textStatus) {
                    alert("Request failed: " + textStatus);
                }
            });

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-20 01:20:06

最后,我找到了解决方案!我实际上需要将base64字符串数据转换为Blob。然后我们就可以下载了。以前,它没有正确转换。这就是文件被下载但由于文件损坏而无法加载的原因。下面是我的代码,

代码语言:javascript
复制
$.ajax({
                url: 'my api url',
                headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },
                type: 'POST',
                data: JSON.stringify(selectedIds),
                success: function (data) {
                    var a = document.createElement('a');
                    var isIE = false || !!document.documentMode;
                    
                    if (!isIE) {
                        // This part is working properly
                        for (var i = 0; i < data.length; i++) {
                            a.href = "data:application/octet-stream;base64," + data[i];
                            a.target = '_blank';
                            a.download = 'report.pdf';
                            a.click();
                        }
                    } else {
                        for (var i = 0; i < data.length; i++) {
                            var base64Data = data[i];
                            var fileName = 'report.pdf';
                            var byteCharacters = atob(base64Data);

                            var byteNumbers = new Array(byteCharacters.length);

                            for (var j = 0; j < byteCharacters.length; j++) {
                                byteNumbers[j] = byteCharacters.charCodeAt(j);
                            }

                            var byteArray = new Uint8Array(byteNumbers);
                            var blob = new Blob([byteArray], { type: 'application/pdf' });

                            window.navigator.msSaveOrOpenBlob(blob, fileName);                            
                        }
                    }
                    
                },
                fail: function (jqXHR, textStatus) {
                    alert("Request failed: " + textStatus);
                }
            });

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65775909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档