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