javascript - document.location 不生成文件

标签 javascript xml excel base64

我正在尝试生成 Excel 文件,并在用户单击按钮时在浏览器中下载。

   var vFullExportContent = getExcelXmlNew(includeHidden, fullPageStore);   

这会生成带有 XML 的 Excel 文件数据。

我想使用 Base64 对其进行编码,并使用下面的代码行使用 document.location 下载文件。当我的 Excel 记录超过 1000 行时,这不会生成文件。低于 1000 行就可以了。

    document.location='data:application/vnd.ms-excel;base64,' + Base64.encode(vFullExportContent);

而且我还验证了所有(3259 行)数据是否存在任何编码问题,没有观察到任何情况。也就是说,我在应用程序中应用了过滤器来检索千分之一以下的唯一行以及所有三次报告下载。

非常感谢您的帮助。

最佳答案

现在您不再需要 Base64。相反,您可以将 XML 包装在 Blob 中并为用户提供 Object URL下载它。

首先,blob 是二进制数据 block ,而不是 JavaScript 文本,因此我们将您的文本转换为 Uint8Array(您可能需要在浏览器中 polyfill TextEncoder):

var encoder = new TextEncoder('utf8')
var blob = new Blob(encoder.encode(vFullExportContent), {type: "application/xml"})

接下来,生成 URL(这将是一个引用 Blob 的短 URL,而不是数据的表示形式):

var url = URL.createObjectURL(blob)

并显示指向该链接的链接(如果必须的话,可以使用 window.location)。

用户下载文件后,不要忘记调用 URL.revokeObjectURL(blob) 以便对 blob 进行垃圾回收。

关于javascript - document.location 不生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026306/

相关文章:

javascript - 单击后输入文本返回默认值

javascript - 单击 div 时在 jQuery 中发送 POST 请求

java - 不应在 android manifest 文件中声明 minSdk 版本

xml - 从 XML 属性到 R 中的 data.frame

vba - Excel - 将索引匹配公式更改为 VBA 操作

excel - 将元数据添加到 CSV 文件中以指示 Excel 应如何打开

javascript - 悬停时更改 div 内的图片(带边框)

javascript - 如何从动态创建的 div 的 ID 中获取值?

xml - 我应该为 xml 文件创建一个新的扩展名吗?

excel - 具有 OR 标准的 VBA Countif