“data:”URL方案是否有任何大小限制
值?我对流行的网络浏览器的局限性感兴趣。换句话说,data:image/jpg;base64,base64_encoded_data
或<img src="data:image/jpg;base64,base64_encoded_data" />
可以background-image: url(data:image/jpg;base64,base64_encoded_data)
多长时间?
答案 0 :(得分:59)
有很多答案。由于这个问题是在5年多前提出的,现在大多数都是因为过时而不正确,但这个问题位于谷歌搜索结果的顶部,数据是限制&#34;。数据URI现在是widely supported,IE 7/8不再是相关的浏览器。下面有很多参考文献,因为答案在今天很细致。
数据URI规范没有定义大小限制,但表示应用程序可能会强加自己的。
total_physical_memory / 5
(source)。higher limit (500MiB in Chrome)可能替代您的用例的一种技术是通过URL.createObjectURL()通过URL API使用File API和blob的Blob网址。 Using URL.createObjectURL()中提供了一个示例。
How to write a file / give it to the user中提到的一些其他选择包括:FileSaver.js,StreamSaver.js和JSZip。
您可以使用Modernizr检测对data URIs over 32kb的支持。
这些答案与这个问题几乎相同,但我提到它们可以节省您阅读每个答案的时间。
答案 1 :(得分:42)
我刚刚快速检查了8种不同的Jpeg图像,其大小从3,844到 2,233,076字节。
以下所有浏览器都在我的 Windows 7 (64位)系统上正确显示每个图像:
答案 2 :(得分:18)
来自http://www.ietf.org/rfc/rfc2397.txt:
“data:”URL方案仅有用 对于短期值。请注意一些 使用URL的应用程序可能会强加 长度限制;例如,URL 嵌入在HTML中的
<A>
个锚点中 有一个长度限制由 HTML的SGML声明[RFC1866]。 LITLEN(1024)限制了数量 可以出现在。中的字符 单个属性值文字, ATTSPLEN(2100)限制所有的总和 所有属性值的长度 出现在标签中的规格, 塔格伦(2100)限制了 标签的总长度。
答案 3 :(得分:9)
我已经读过Safari对数据URI的限制为128K:
http://blog.clawpaws.net/post/2007/07/16/Storing-iPhone-apps-locally-with-data-URLs#c1989348
Chrome是2M:
答案 4 :(得分:5)
2017答案是: 将数据转换为带有函数的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 url
var temp_url = window.URL.createObjectURL(blob);
然后在需要的时候在新窗口中使用它。
var redirectWindow = window.open('');
redirectWindow.document.write('<iframe src="' + temp_url + '" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>')
适用于chrome / firefox 2017中的大文件
答案 5 :(得分:4)
这真的是“data URI scheme”。
根据维基百科页面,IE7缺乏支持,IE8测试将其限制为32kB数据。
答案 6 :(得分:4)
关于网络浏览器的限制,MSIE 6/7不支持数据网址方案...... 有关wikipedia
的更多信息每个浏览器的长度限制是不同的 - 我相信IE8最多允许32KB,Opera是4KB,但不能真正讲述其他浏览器......
答案 7 :(得分:2)
仅仅是一个FYI,我能够通过JavaScript ajax调用在Firefox 3.5中使用数据URL加载130K图像。它在IE 8中截断了图像,但整个事情都出现在FF中。
答案 8 :(得分:1)
似乎Firefox 3.6中的限制为600KB。
答案 9 :(得分:1)
我尝试了waza123的代码,但charCodeAt
方法没有正确转换所有字符。这是我在浏览器中创建大量下载的解决方案。 (我将它用于JSON数据)
function exportToFile(jsonData, fileName) {
const u8arr = new TextEncoder('utf-8').encode(JSON.stringify(jsonData, null, 2));
const url = window.URL.createObjectURL(new Blob([u8arr], { type: 'application/json' }));
const element = document.createElement('a');
element.setAttribute('href', url);
element.setAttribute('download', fileName);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
答案 10 :(得分:0)
注意:IE中还有一些其他限制。对于iframe,上限为4 kb。
在IE9中,删除了DataURI的32kb限制,尽管出于安全原因,它们的使用仍然仅限于某些上下文(特别是,禁止创建诸如IFRAMES之类的安全上下文的场景)