Retrieve An Image From The Server, Store It In Localstorage, And Display It
Solution 1:
Javascript (AJAX call)
functionLoadImg(filename) {
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = newXMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = newActiveXObject("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);
}
PHP ( load.php )
<?phpif (isset($_GET['LoadImg'])) {
header("Content-Type: image/png");
$file = file_get_contents($_GET['LoadImg']);
echo base64_encode($file);
}
?>
Read this may help you:
PS: maybe your Base64
is wrong?
Solution 2:
Browsers have size limitations other than the localStorage limit of 5MB. The data for the <img src="data:image/jpeg;base64,...">
is also restricted and is usually much less than 5MB. The easiest way around this is to just pass the file-names via localStorage and let the browsers caching do the work.
Solution 3:
Turns out, AJAX can't be used to reliably transfer binary data. The solution is to run the Base64 encoding server-side, and transfer the resulting string through AJAX.
The above php-code works. For whoever is looking for a ASP.Net / C# solution:
publicstringImage(string relpath)
{
Response.ContentType = "image/jpeg";
string base64;
string filename = Request.PhysicalApplicationPath + relpath;
try
{
using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
var buffer = newbyte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
base64 = Convert.ToBase64String(buffer);
}
}
catch (IOException e)
{
return filename + " / " + e.Message;
}
return base64;
}
Please note that this code is NOT SECURE to expose directly to the outer world. I personally use a wrapper-function that parses the path from a db.
Solution 4:
You can get the data uri (which will contain the base 64 encoding) via JavaScript using the HTML5 canvas element.
// I'm assuming here you've put the image in an <img> tag on the page already.// If not, you'll need to adapt this a bit, or perhaps this approach is just// not right for your situation.var image = document.getElementById('id-of-image-you-want');
var canvas = w.document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0);
try {
var dataUri = canvas.toDataURL();
} catch (e) {
console.log("D'oh!"); // Improve this error handling, obviously.
}
dataUri
will now contain the data uri for the image which will contain, along with a short prefix, the base 64 encoding of the image.
Be sure to add detection for canvas support. IE 8 and older do not support it.
Post a Comment for "Retrieve An Image From The Server, Store It In Localstorage, And Display It"