5

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

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

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

如何获得 JS 中的最大 Data-URI 大小?

4

2 回答 2

8

我决定硬编码这张表:

这是我用来测试 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 Bytes,正好是 2 MB
  2. Firefox(从版本 26 开始):使用1 040 000 Bytes,可能是 1 MB
于 2013-07-25T10:03:57.530 回答
1

好的旧硬代码呢?:-)

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

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

于 2013-06-13T09:08:11.447 回答