¿Funcionalidad de carga de archivos en el cierre de google?

Estoy creando un proyecto en el motor de Google Apps. Aquí estoy tratando de subir un archivo a blobstore. Tengo un archivo html con varios formularios, donde cada formulario tiene un botón para subir archivos

 

Ahora, tan pronto como el usuario selecciona un archivo con este botón, el archivo debe comenzar a cargarse en el almacén de blob GAE.
Tengo el código de python que puede hacer esto subiendo cosas pero no puedo vincular mi código de backend (python) al archivo que he examinado. Además, como hay varios formularios, la página no debe actualizarse.

He encontrado una solución para actualizar la página en el cierre de google (usando una ventana emergente), pero no es un deseo en mi proyecto. Creo que no hay otra manera en la biblioteca de cierre.

Estoy intentando hacerlo utilizando la llamada ajax, pero mi conocimiento muy limitado de ajax me impide obtener los resultados deseados.

Usar JQUERY no es una opción.

Espero que mi pregunta sea clara, por favor vuelva si no.

Cualquier ayuda es muy apreciada.

Gracias

Google Closure proporciona una clase IframeIo que puede publicar su archivo (sin actualizar la página), documentación disponible aquí, http://closure-library.googlecode.com/svn/docs/class_goog_net_IframeIo.html

Implementamos un contenedor en IframeIo (disponible bajo la licencia BSD) para presentar al usuario una entrada de carga de archivos y la publicación a una URL cuando seleccionan un archivo. Fuente disponible en, https://code.google.com/p/prestans/source/browse/trunk/client/closure/ui/IframeFileUpload.js

El manejo de los códigos de éxito / fracaso es un poco complicado, dependiendo de lo que devuelva de su controlador de carga de archivos Blobstore.

Lo que usé es usar el intercambio de la entrada / control de archivos. El onChange devuelve el control y el tipo mime. Desde dentro del onchange puede acceder a la matriz de listas de archivos del control para obtener el nombre de archivo. Usando el nombre de archivo, puede usar FileReader para cargar los datos reales. Estos datos se pueden cargar mediante una publicación xhr (y convertirlos a base64) en el servidor. Algo como:

 function onChange(control, mimetype) { var f = control.files; if (f.length) { var reader = new FileReader; reader.onload = function() { // Post using xhr } reader.readAsBinaryString(f) } 

Por favor, no el objeto FileReader no está presente en todos los navegadores … (¡Chrome lo admite!)