当前位置:  开发笔记 > 编程语言 > 正文

数据协议URL大小限制

如何解决《数据协议URL大小限制》经验,为你挑选了7个好方法。

"data:"URL方案值是否有任何大小限制?我对流行的网络浏览器的局限感兴趣.换句话说,多久可以data:image/jpg;base64,base64_encoded_data成为background-image: url(data:image/jpg;base64,base64_encoded_data)



1> Taylor Edmis..:
简答:数据URI限制有所不同.

有很多答案.由于问题是在5年多前提出的,现在大多数都是因为过时而不正确,但这个问题位于谷歌"数据uri限制"结果的顶部.数据URI现在得到广泛支持,IE 7/8不再是相关的浏览器.下面有很多参考文献,因为答案在今天是微妙的.

数据URI限制

数据URI规范没有定义大小限制,但是应用程序可能会强加自己的大小限制.

Chrome - 当前文档为2MB.否则,限制是任意blob的内存存储限制:如果是x64而不是ChromeOS或Android,则为2GB; 否则,total_physical_memory / 5(来源).

Firefox - 无限制

IE≥9&Edge - 4GB

Safari和Mobile Safari - ?

备择方案

一种具有更高限制的技术(Chrome中为500MiB)可能是您的用例的替代方案,Blob URL通过URL.createObjectURL()使用URL API和blob通过File API.使用URL.createObjectURL()中提供了一个示例.

如何编写文件/将其提供给用户中提到的一些其他替代方法是:FileSaver.js,StreamSaver.js和JSZip.

您可以使用Modernizr检测超过32kb的数据URI支持.

相关问题

这些答案与这个问题几乎相同,但我提到它们可以节省您阅读每个答案的时间.

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

数据uri太大时"Aw,Snap"

Base64 DataURL图像的大小限制是多少?

不同浏览器中URL的最大长度是多少?这个问题是关于URL,而不是数据URI,但是有关于数据URI的相关答案和评论.

是否可以以编程方式检测数据URL的大小限制?



2> miasbeck..:

我刚刚快速检查了嵌入八个不同的Jpeg图像,大小从3,844到2,233,076字节不等.

所有以下浏览器都在我的Windows 7(64位)系统上正确显示每个图像:

铬14.0.816.0

Firefox 11.0

谷歌浏览器18.0.1025.142

Internet Explorer 9.0.5(64位)

歌剧11.62

Safari 5.1.5


@miasbeck,为什么停在2 MB?
我的IE9在此期间已成为IE10,因此只能向您保证它在IE9中有效.它仍然适用于IE10.这里有大约244KBytes的测试图像(查看来源)http://www.butterweck.de/test/dataimgtest.html

3> John Saunder..:

来自http://www.ietf.org/rfc/rfc2397.txt:

"data:"URL方案仅对短值有用.请注意,某些使用URL的应用程序可能会施加长度限制; 例如,嵌入在HTML中的锚点中的URL 具有由HTML [RFC1866]的SGML声明确定的长度限制.LITLEN(1024)限制可出现在单个属性值文字中的字符数,ATTSPLEN(2100)限制出现在标签中的所有属性值规范的所有长度的总和,并且TAGLEN(2100)限制标签的总长度.


虽然阅读规范很有意思,试图留在其中是不明智的.从我们的本质来说,我们作为Web开发人员始终处于技术的最前沿.如果你遵守规范你就会不必要地克制自己.LicenseQ完全正确,数据URL对这些限制完全没用.但它们并非无用,而且限制并不是真正的限制(因为所有浏览器供应商都忽略了它们).所以让自己自由!使用miasbeck中的信息对您有利.这是我们的计划所存在的实际现实.

4> Nicholas Dal..:

我已经读过Safari对数据URI的限制为128K:

http://blog.clawpaws.net/post/2007/07/16/Storing-iPhone-apps-locally-with-data-URLs#c1989348

Chrome是2M:

http://code.google.com/p/chromium/issues/detail?id=44820#c1



5> Jay Kominek..:

它实际上是“ 数据URI方案 ”。

根据Wikipedia页面,IE7缺乏支持,而IE8 Beta将其限制为32kB数据。



6> J.C. Inacio..:

关于Web浏览器的限制,MSIE 6/7不支持数据URL方案...更多关于维基百科的信息

每个浏览器的长度限制是不同的 - 我相信IE8允许高达32KB,歌剧是4KB,但无法真正讲述其他浏览器......



7> waza123..:

2017年的答案是:将数据转换为具有功能的data Blob:dataURLtoBlob

function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type:mime});
}

然后创建Blob网址

var temp_url = window.URL.createObjectURL(blob);

然后根据需要在新窗口中使用它。

var redirectWindow = window.open('');
redirectWindow.document.write('')      

在chrome / firefox 2017中处理大文件

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有