Hi I am trying to store a actionscript ByteArray as a Blob in the
datastore. Does anyone have experience doing this?
So far I can create a blob from a string but not from a ByteArray. I
definitely can't read it back. I am very new to Python and GAE, and
fairly new to actionscript.
Any pointers would be appreciated!
Thanks
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.utils.ByteArray;
import flash.errors.EOFError;
public class Main extends Sprite
{
private var netConnection:NetConnection = null;
private var output:TextField = null;
public function Main()
{
netConnection = new NetConnection();
netConnection.addEventListener(NetStatusEvent.NET_STATUS,
netStatusHandler);
netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
securityErrorHandler);
output = new TextField();
output.autoSize = TextFieldAutoSize.LEFT;
output.x = 100;
output.y = 100;
addChild(output);
netConnection.connect("http://localhost:8080/");
//netConnection.connect("http://antfarmtest1.appspot.com");
var byteArray:ByteArray = new ByteArray();
byteArray.writeUTF(2222);
insertBlob(byteArray);
}
private function insertBlob(value:ByteArray): void
{
try {
var test:String = value.readUTF();
}
catch(e:EOFError) {
trace(e); // EOFError: Error #2030:
End of file was
encountered.
test = "dd";
}
var responder:Responder = new
Responder(insertBlobSuccess, onFail);
netConnection.call("antfarm.insertBlob", responder,
test);
}
private function insertBlobSuccess(results:String):void
{
output.htmlText = "Insert Successful";
}
private function insertValue(value:String): void
{
var responder:Responder = new Responder(insertSuccess,
onFail);
netConnection.call("antfarm.insertData", responder,
value);
}
private function insertSuccess(results:String):void
{
output.htmlText = "Insert Successful";
}
private function retrieveValue(value:String): void
{
var responder:Responder = new
Responder(retrieveSuccess, onFail);
netConnection.call("antfarm.selectData", responder,
value);
}
private function retrieveSuccess(results:String):void
{
output.htmlText = results;
}
private function netStatusHandler(event:NetStatusEvent):void
{
switch (event.info.code)
{
case "NetConnection.Connect.Success":
break;
case "NetConnection.Call.Failed":
break;
default:
trace("Unhandled Net Status Event");
}
trace("NetStatusEvent Code:\t" + event.info.code);
trace("NetStatusEvent Desc:\t" +
event.info.description);
trace("NetStatusEvent Details:\t" + event.info.details);
trace("NetStatusEvent Level:\t" + event.info.level);
}
private function
securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
private function onComplete(results:String):void
{
output.htmlText = results;
}
private function onFail(results:Object):void
{
switch (results.code)
{
case "Service.ResourceNotFound":
output.appendText(results.code);
output.appendText("\n");
output.appendText(results.description);
break;
default:
trace("Unhandled Net Status Event");
output.appendText("Unhandled onFail
Event");
}
trace("onFail Code:\t" + results.code);
trace("onFail Desc:\t" + results.description);
trace("onFail Level:\t" + results.level);
for each (var thisResult:String in results)
trace("onFail Details:\t" + thisResult);
}
}
}
import logging
import datetime
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from pyamf.remoting.gateway.google import WebAppGateway
class Employee(db.Model):
name = db.StringProperty(required=True)
class Blober(db.Model):
blob = db.BlobProperty(required=True)
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
def insertData(data):
e = Employee(name=data)
e.put()
return "Success"
def selectData(data):
results = db.GqlQuery("SELECT * FROM Employee WHERE name = :name",
name=data)
e = ""
for result in results:
e += result.name + "\n"
return e
def insertBlob(data):
if isinstance(data, unicode):
data = data.encode('utf-8', 'replace')
e = Blober(blob=db.Blob(data))
e.put()
return "Success"
def selectBlob(data):
return "dd"
#def getMovie(title):
# result = db.GqlQuery("SELECT * FROM Movie WHERE title = :1 LIMIT
1",
# title).fetch(1)
# if (len(result) > 0):
# return result[0]
# else:
# return None
def main():
debug_enabled = True
services = {
'antfarm.insertData': insertData,
'antfarm.selectData': selectData,
'antfarm.insertBlob': insertBlob,
'antfarm.selectBlob': selectBlob
}
gateway = WebAppGateway(services, logger=logging,
debug=debug_enabled)
application_paths = [('/', gateway), ('/helloworld', MainPage)]
application = webapp.WSGIApplication(application_paths,
debug=debug_enabled)
run_wsgi_app(application)
if __name__ == '__main__':
main()
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en.