Continuing the theme of using Google Apps Script Content service and scriptDB for lots of things, today’s post cover a few tricky topics.
- How to convert an image to a blob so it can be stored in scriptDB.
- How to use the content service as a server so that we can serve up that image to some request
- How to respond to a jSonP request from Google Content service to get over cross domain request problems
- How to convert that back into an image in jQuery
Why might we want to do this?
Google apps script gives you the opportunity to serve up content without actually needing a web server. Let’s say you wanted to create some dynamic image content throug some scheduled event, but had nowhere to serve it up from? ScriptDB could be a good repository for such data, and Google Apps Script could serve it up
Loading image into scriptDB
Firstly, let’s take a look at loading an image into scriptDB. I’m going to use the silo functions to minimize development for this. These can be included in your project from the mcpher script library.
1 2 3 4 5 6 7 8 9 |
function blob() { var googleLogoBlob = UrlFetchApp.fetch ("http://www.google.com/intl/en_com/images/srpr/logo3w.png") .getBlob().setName("googleLogoBlob"); var silo = mcpher.scriptDbSilo("blobs",ScriptDb.getMyDb()); silo.save ( {name: googleLogoBlob.getName(), blob: Utilities.base64Encode(googleLogoBlob.getBytes()) } ); } |
Publishing as a web application
Next we need to publish a doGet(e) function that will be able to publish a jSon encoded version of that blob.
1 2 3 4 5 |
function doGet(e) { return ContentService .createTextOutput(blobGet(e)) .setMimeType(ContentService.MimeType.JSON); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function blobGet(e) { // imgs are in base64 format in scriptDB var stuffSilo = mcpher.scriptDbSilo("blobs",ScriptDb.getMyDb()); var results = stuffSilo.query( {name : e.parameter.name}); // find it? var result= results.hasNext() ? results.next() : { error: "no such blob " + e.parameter.name}; var j = Utilities.jsonStringify(result); // using jsonP? if (e.parameter.callback) { j = e.parameter.callback + "(" + j + ")" } return j; } |
Putting it together with jQuery
Finally, here is a jQuery snippet of making that call and showing the image. You’ll can test the whole thing with this jsfiddle, reproduced below.
1 |
<div id='blobs'><img id='blobsimage' src=''/></div> |
Be the first to comment