使用javascript|IE11下载base64数据
Download base64 data using javascript | IE11
我正在尝试使用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:
注:
我正在开发一个离线网站,在那里我将文件存储在浏览器localStorage中,格式为base64字符串,但未连接到服务器。我没有任何物理文件。
以下适用于所有浏览器
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);
}
我发现了一个javascript的插件,它可能对您有用。在这种情况下,它是为下载指定了MIME类型的base64内容而开发的。此外请看一下这个答案,它解释了如何下载base64编码的内容。
function fnExport(base64encodedstring) {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
// If Internet Explorer:
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv':11'./)) {
txtArea1.document.open("content type", "replace");
txtArea1.document.write(base64encodedstring);
txtArea1.document.close();
txtArea1.focus();
sa = txtArea1.document.execCommand("SaveAs", true, reportname + ".extension");
console.log(sa);
}
else { //other browser not tested on IE 11
sa = window.open('data:content-type;base64,' +base64encodedstring);
}
return (sa);
}
按照以下步骤将Word文档从.NET Web API下载到ajax。
- 将文件转换为base64格式(这只是C#中的2行代码)
- 将base64字符串返回到前端
-
使用以下函数将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 }); }
-
将blob渲染为文件。这在Chrome和IE中的处理方式略有不同。对于Chrome,我们需要使用链接下载选项。
请参阅IE 11的此链接:
https://msdn.microsoft.com/en-us/library/hh779016(v=vs.85).aspx
相关文章:
- 使用javascript|IE11下载base64数据
- 从PhoneGap FileEntry中提取base64编码的数据
- imgur图像上传无法使用base64数据
- Base64解码不适用于二进制数据
- 使用$resource发送音频数据(base64)
- 将base64图像数据作为src分配给图像时,Firefox和Chrome上的结果不一致
- 如何从 base64 数据 URI 在服务器端保存 PNG 图像
- AngularJS - img ng-src 到 base64 数据(不是 url)不起作用
- 如何使用 JavaScript 将图像 URL 转换为 DataURL(base64 数据)
- 张贴base64数据JavaScript/jQuery
- Cordova-捕获视频并检索base64数据
- 如何在服务器端保存PNG图像,使用base64数据字符串javascript
- 当包含作为href的base64数据的HTML链接元素(<a/>)准备就绪时触发的事件
- 基于浏览器的本地文件系统到SVG base64数据字符串
- Base64数据;我应该把“数据”加进去吗?在实际base64之前
- 在Javascript中转换和插入Base64数据到Canvas
- 想要从文件URL获取base64数据
- Base64数据从绝对图像路径
- 为什么Safari在crossOrigin上设置base64数据时会抛出CORS错误?的形象
- 在服务器端保存画布图像时,从base64数据字符串生成空白图像