Skip to content

Commit

Permalink
initial attempt at implementing the blobstore API
Browse files Browse the repository at this point in the history
  • Loading branch information
rsaccon authored and gmosx committed Dec 23, 2009
1 parent 03d3516 commit 27e7853
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 9 deletions.
33 changes: 32 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,38 @@ The Python ext/db api is supported. The API is slightly different to better fit
var c1 = Category.get(key);
var c2 = Category.getByKeyName("news");
var categories = Category.all().limit(3).fetch();


Blobstore
---------

Upload form

<form action="{uploadUrl}" method="post" enctype="multipart/form-data">
<input type="file" name="myFile">
<input type="submit" value="Submit">
</form>

Upload

exports.POST = function(env) {
var blobinfo = blobs.getUploadedBlobs(env);
return {
status : 303,
headers : {
"Location": "/download?blob-key=" + blobinfo.myFile
}
};
};

Download

exports.GET = function(env) {
var params = new Request(env).params();
blobs.serve(env, params["blob-key"]);
return {};
}


Images
------
Expand Down
30 changes: 22 additions & 8 deletions lib/google/appengine/api/blobstore.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,38 @@

var JBlobstoreServiceFactory = Packages.com.google.appengine.api.blobstore.BlobstoreServiceFactory;
var jservice = exports.BlobstoreService = JBlobstoreServiceFactory.getBlobstoreService();

var JBlobKey = exports.BlobKey = Packages.com.google.appengine.api.blobstore.BlobKey;
exports.BlobKeyFactory = Packages.com.google.appengine.api.blobstore.BlobKeyFactory;
/*
var JBlobInfo = exports.BlobInfo = Packages.com.google.appengine.api.blobstore.BlobInfo;
exports.BlobInfoFactory = Packages.com.google.appengine.api.blobstore.BlobInfoFactory;

*/

exports.createUploadUrl = function(dest) {
return String(jservice.createUploadUrl(dest));
};

exports['delete'] = function(blobKey) {
jservice['delete'](blobKey.__key__);

exports['delete'] = function(key) {
//TODO: accept BlobKey object as argument instead of plain text key ???
jservice['delete'](new JBlobKey(key));
};

exports.getUploadedBlobs = function(request) {
return jservice.getUploadedBlobs(request);
exports.getUploadedBlobs = function(env) {
var map = jservice.getUploadedBlobs(env["jack.servlet_request"]);
var result = {};
for (var i in Iterator(map.entrySet())){
result[i.getKey()] = (new String(i.getValue())).split(" ")[1].split(">")[0]; // TODO: better parsing
}
//TODO: return BlobKey objects instead of plain text keys ???
return result;
};

exports.serve = function(env, key) {
jservice.serve(new JBlobKey(key), env["jack.servlet_response"]);
};

/*
var BlobKey = exports.BlobKey = function(keyString) {
this.__key__ = new JBlobKey(keyString);
}
}
*/

0 comments on commit 27e7853

Please sign in to comment.