在Javascript中获取最大数据Uri大小

时间:2013-06-13 08:13:27

标签: javascript data-uri

我想将数据导出为数据URI,只有当数据大小不超过当前浏览器支持的数据URI的最大大小时才会大于我想要的文件下载。

document.location.href= "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,"+data

当文件太大时,这有时会导致浏览器错误,但我希望在下载之前可以捕获错误(例如尝试其他方法)。

如何在JS中获取最大数据URI大小?

2 个答案:

答案 0 :(得分:7)

我决定对此表进行硬编码:

这是我用来测试maxsize的脚本:

String.prototype.repeat = function( num )
{
    return new Array( num + 1 ).join( this );
}

testDataURI=function(size) 
{
    window.open("data:text/plain,"+"a".repeat(size-16))
}


testDataURI(100000) //test 100k characters

JSFIDDLE

结果:

  1. Chrome(自版本28起):适用于 2 097 152字节,正好是2 MB
  2. Firefox(版本26):使用 1 040 000字节,大​​概是1 MB

答案 1 :(得分:1)

好老hardcode怎么样? : - )

我也可以想象一些js测试,因此它不可靠并且需要服务器通信至少一次并且可能不是非常可靠,因为它也可以根据浏览器实现以及服务器处理长URL的可能性而变化(但是至少你知道它为你的服务器)。无论如何它是:从您的服务器加载静态html页面(使用http标头将其永久缓存在客户端上,不会因请求参数而变化)到隐藏的iframe或只是使用ajax get。例如,您知道目标URL(“data:application ...”)的长度为3000个符号。比你构建与静态html http://yourserver.com/test.html?param1=param1&param2=param2&相同长度的假网址并尝试加载它。如果加载成功,则可以打开真实URL。

总而言之,我认为在这种情况下硬编码并不是那么糟糕。