使用javascript |下载base64数据IE11

时间:2016-05-13 07:25:48

标签: javascript jquery

我正在尝试使用JavaScript中的“window.location.href”下载base64数据。它在Chrome中运行良好,但相同的代码在IE11中无效。

请您告诉我相应修复程序或解决方法吗?

这是代码: 使用Javascript:

function DownloadPdf() {
window.location.href = "data:application/pdf;base64,JVBERi0xLjMNJeLjz9MNCj........Pg1zdGFydHhyZWYNMTczDSUlRU9GDQ=="

}

function DownloadExcel() {
window.location.href = "data:application/vnd.ms-excel;base64,UEsDBBQABgAIAAAAIQB......BLBQYAAAAACgAKAIACAACzHAAAAAA="
}

HTML:

注:

我正在开发一个离线网站,我将文件以base64字符串格式存储在浏览器localStorage中,该格式未连接到服务器。我没有任何物理文件。

3 个答案:

答案 0 :(得分:7)

以下内容适用于所有浏览器

var blob = new Blob([tdData], { type: 'text/csv' });
if (window.navigator.msSaveBlob) { // // IE hack; see http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx
    window.navigator.msSaveOrOpenBlob(blob, 'exportData' + new Date().toDateString() + '.csv');
}
else {
    var a = window.document.createElement("a");
    a.href = window.URL.createObjectURL(blob, { type: "text/plain" });
    a.download = "exportData" + new Date().toDateString() + ".csv";
    document.body.appendChild(a);
    a.click();  // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access
    document.body.removeChild(a);
}

答案 1 :(得分:1)

我找到了{em> javascript 的a plugin,在这种情况下可能对您有用,它是为了用 MIME下载 base64 内容而开发的指定的类型。 此外 请查看this answer,其中介绍了如何下载base64编码的内容。

# coding: yourcustomcodec

答案 2 :(得分:0)

按照以下步骤将Word文档从.NET Web API下载到ajax。

  1. 将文件转换为base64格式(这只是C#中的2行代码)
  2. 将base64字符串返回到前端。
  3. 使用以下函数将base64字符串转换为blob。

    base64toBlob = function (base64Data, contentType) {
        contentType = contentType || '';
        var sliceSize = 1024;
        var byteCharacters = atob(base64Data);
        //var byteCharacters = decodeURIComponent(escape(window.atob(base64Data)))
        var bytesLength = byteCharacters.length;
        var slicesCount = Math.ceil(bytesLength / sliceSize);
        var byteArrays = new Array(slicesCount);
    
        for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
            var begin = sliceIndex * sliceSize;
            var end = Math.min(begin + sliceSize, bytesLength);
    
            var bytes = new Array(end - begin);
            for (var offset = begin, i = 0 ; offset < end; ++i, ++offset) {
                bytes[i] = byteCharacters[offset].charCodeAt(0);
            }
            byteArrays[sliceIndex] = new Uint8Array(bytes);
        }
        return new Blob(byteArrays, { type: contentType });
    }
    
  4. 将blob渲染为文件。 Chrome和IE浏览器的处理方式略有不同。对于Chrome,我们需要使用链接下载选项。

  5. 请参阅此链接以获取IE 11:
    https://msdn.microsoft.com/en-us/library/hh779016(v=vs.85).aspx