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.

Reply via email to