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"