我想将数据导出为数据URI,只有当数据大小不超过当前浏览器支持的数据URI的最大大小时才会大于我想要的文件下载。
document.location.href= "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,"+data
当文件太大时,这有时会导致浏览器错误,但我希望在下载之前可以捕获错误(例如尝试其他方法)。
如何在JS中获取最大数据URI大小?
答案 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
答案 1 :(得分:1)
好老hardcode怎么样? : - )
我也可以想象一些js测试,因此它不可靠并且需要服务器通信至少一次并且可能不是非常可靠,因为它也可以根据浏览器实现以及服务器处理长URL的可能性而变化(但是至少你知道它为你的服务器)。无论如何它是:从您的服务器加载静态html页面(使用http标头将其永久缓存在客户端上,不会因请求参数而变化)到隐藏的iframe或只是使用ajax get。例如,您知道目标URL(“data:application ...”)的长度为3000个符号。比你构建与静态html http://yourserver.com/test.html?param1=param1¶m2=param2&相同长度的假网址并尝试加载它。如果加载成功,则可以打开真实URL。
总而言之,我认为在这种情况下硬编码并不是那么糟糕。