Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript document.location不生成文件_Javascript_Xml_Excel_Base64 - Fatal编程技术网

Javascript document.location不生成文件

Javascript document.location不生成文件,javascript,xml,excel,base64,Javascript,Xml,Excel,Base64,我试图生成一个Excel文件并在用户单击按钮时在浏览器中下载 var vFullExportContent = getExcelXmlNew(includeHidden, fullPageStore); 这将使用XML生成Excel文件数据 我想使用Base64对其进行编码,并使用下面的代码行使用document.location下载文件。当我的excel记录超过1000行时,这不会生成文件。低于1000行就可以了 document.location='data:appli

我试图生成一个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中,并为用户提供下载它的权限

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

接下来,生成URL(它将是引用Blob的短URL,而不是数据的表示):

并显示指向该位置的链接(如果必须,请使用window.location)


一旦用户下载了文件,不要忘记调用
URL.revokeObjectURL(blob)
,这样blob就可以被垃圾收集。

您的方法会生成一个
数据:
URI
,其中包含所有数据。因此,如果数据量巨大,那么这个
URI
将是巨大的,因此它可能会影响到一些用户。那么,您使用的是什么浏览器?您使用过Firefox浏览器吗?一般来说,应该避免这种方法,应该使用一个库,它可以真正创建
Excel
文件,然后可以下载这些文件。
var encoder = new TextEncoder('utf8')
var blob = new Blob(encoder.encode(vFullExportContent), {type: "application/xml"})
var url = URL.createObjectURL(blob)