document.location不生成文件

时间:2017-03-26 07:40:58

标签: 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行)数据,没有观察到任何内容。这就是我在应用程序中应用过滤器以检索低于千位的唯一行,并且所有三次都报告下载。

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

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

首先,blob是二进制数据块,而不是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进行垃圾回收。