document.location不生成文件

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

var vFullExportContent = getExcelXmlNew(includeHidden, fullPageStore); 

这用XML生成Excel文件数据。

我想使用Base64进行编码,并使用下面的代码行使用document.location下载文件。 而当我有我的Excellogging超过1000行时,这不会生成一个文件。 低于1000行是可以的。

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

而且我也validation了我所有的(3259行)数据的任何编码问题,没有观察到任何东西。 那就是我在应用程序中应用filter来检索低于千分之一的独特行,并且所有三次报告下载。

非常感谢帮助。

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

首先,blob是二进制数据块,而不是JavaScript文本,因此我们将您的文本转换为Uint8Array(您可能需要在浏览器中填充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进行垃圾回收。