Tin*_*ank 9 javascript ajax html5 base64 image
这应该很简单,但经过几个小时的摔跤,我仍然无法让它发挥作用.根据firefox的说法,到目前为止,我所有的尝试都导致图像变得"被破坏或被截断".
使用jquery-ajax调用从服务器检索图像:
$.ajax({
async: false,
url: db[key]["DocumentLink"],
success: function (result2) {
Run Code Online (Sandbox Code Playgroud)
Base64对图像进行编码,并将其存储在localStore中:
在这个例子中,我使用的是jquery base64-encoding插件,但我尝试了几个.
var dbKey = "Doc " + db[key]["ID"] + " " + db[key]["Title"];
console.log("storing: " + db[key]["DocumentLink"] + " in " + dbKey + "\n");
localStorage.removeItem(dbKey);
var base64Image = $.base64Encode(result2);
console.log(base64Image.length);
localStorage.setItem(dbKey, base64Image);
console.log("is stored: " + db[key]["DocumentLink"] + " in " + dbKey + "\n");
}
})
Run Code Online (Sandbox Code Playgroud)
使用数据网址显示图片:
function openImageFromDB(dbKey) {
console.log("Trying to display image with key " + dbKey);
var base64Img = localStorage.getItem(dbKey);
document.getElementById("documentHolder").src='data:image/jpeg;base64,' + base64Img;
}
Run Code Online (Sandbox Code Playgroud)
相应的img:
<img id="documentHolder" alt="Image view placeholder" src="" />
Run Code Online (Sandbox Code Playgroud)
但是,每次尝试时,firefox都会显示:
Image corrupt or truncated: data:image/jpeg;base64,77+977+977+977+9a<... much longer string>
Run Code Online (Sandbox Code Playgroud)
Url:指向有效的jpeg图像,base64Image.length和错误消息显示var/localStorage实际上包含似乎是base64编码的数据.
有任何想法吗?
Javascript(AJAX调用)
function LoadImg(filename) {
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("documentHolder").src = "data:image/png;base64," + xmlhttp.responseText;
}
};
xmlhttp.open("GET", 'load.php?LoadImg='+filename );
xmlhttp.send(null);
}
Run Code Online (Sandbox Code Playgroud)
PHP(load.php)
<?php
if (isset($_GET['LoadImg'])) {
header("Content-Type: image/png");
$file = file_get_contents($_GET['LoadImg']);
echo base64_encode($file);
}
?>
Run Code Online (Sandbox Code Playgroud)
阅读本文可能对您有所帮助
PS:也许你Base64错了?
小智 6
浏览器的大小限制除了localStorage限制为5MB.该数据<img src="data:image/jpeg;base64,...">也受到限制,通常远小于5MB.最简单的方法是通过localStorage传递文件名,让浏览器缓存完成工作.
| 归档时间: |
|
| 查看次数: |
27223 次 |
| 最近记录: |