2009-06-09 13 views
6

Sé que esto se ha preguntado antes, pero realmente no hay una respuesta clara. Mi problema es que construí un script de carga de archivos para GAE y solo descubrí después, que solo puedes almacenar archivos hasta aprox. 1MB en el almacén de datos. Puedo detenerlo aquí si me puede decir que si habilito la facturación, el límite de 1 MB es el historial, pero lo dudo.Google App Engine y Amazon S3 File Uploads

Necesito poder cargar hasta 20mb por archivo, así que pensé que tal vez podría usar el S3 de Amazon. ¿Alguna idea sobre cómo lograr esto?

Me dijeron que use una combinación de GAE + Ec2 y S3, pero no tengo idea de cómo funcionaría.

Gracias, Max

Respuesta

13

Desde el Amazon S3 documentation:

  1. El usuario abre un navegador web y accesos tu página web

  2. Su página web contiene un formulario HTTP que contiene toda la información necesaria para que el usuario cargue contenido en Amazon S3.

  3. El usuario carga contenido directamente en Amazon S3.

GAE prepara y sirve la página web, una operación rápida. Su usuario carga a S3, una operación larga, pero que se realiza entre el navegador de su usuario y Amazon; GAE no está involucrado.

Parte del protocolo S3 es success_action_redirect, que le permite indicar a S3 dónde apuntar el navegador en caso de una carga exitosa. Esa redirección puede ser GAE.

+0

Ok suena genial y definitivamente lo haré así. ¿Cómo seguiría si quisiera almacenar información sobre el archivo en GAE Data Store? Al igual que el usuario que lo almacenó y el tipo de mimo, por ejemplo? – mistero

+0

Almacene esa información cuando el usuario solicite la página 'redirigir'. Puede hacer una solicitud HEAD en el archivo recién cargado para buscar los metadatos, si es necesario. –

+0

¿Qué pasa con los problemas de seguridad? Quiero decir que no hay forma de validar los datos (excepto AJAX) en el formulario antes de enviarlo a S3 ¿verdad? Entonces, básicamente, si configuro el max. tamaño de archivo dentro del formulario como Amazons lo sugiere; puede simplemente escribir su propio formulario y subirlo a mi cuenta? Y los metadatos que agregaría en el formulario también se pueden modificar fácilmente ... – mistero

3

Google App Engine y EC2 son competidores. Hacen lo mismo, aunque GAE proporciona un entorno para que su aplicación se ejecute con estrictas restricciones de idioma, mientras que EC2 le proporciona una máquina virtual (piense VMWare) en la que alojar su aplicación.

S3 por otro lado es una aplicación de almacenamiento en bruto. Puede usar una APLICACIÓN SOAP o REST para acceder a ella. Si desea seguir con GAE, puede simplemente usar el Amazon S3 Python Library para realizar llamadas de REST de Python a S3.

Por supuesto, tendrá que pagar por el uso en S3. Es sorprendente lo granular que es su facturación. Cuando comencé, literalmente me cobraron 4 centavos por mes.

+0

Bien, hasta ahora todo bien. Pero si tengo un archivo de 20 MB y uso la biblioteca de Python de Amazon S3 para enviar ese archivo a S3 ... ¿no matará GAE el proceso porque lleva más de 30 segundos? – mistero

+0

Para ser sincero, realmente no conozco las limitaciones de GAE, solo lo analicé brevemente y sus defectos fueron evidentes y limitantes para mis usos particulares. Para ser sincero, aparte del hecho de que tienen una edición gratuita disponible, veo muy poco que lo recomiende. – Serapth

+4

Estoy bastante seguro de que ya sabía todo esto, y no es lo que estaba preguntando. –

2

Para referencia futura, Google agregó soporte para la carga de archivos grandes (hasta 50 MB): la nueva característica se lanzó como parte de y se discute here.

+1

[Ese enlace] (http://code.google.com/appengine/docs/python/blobstore/overview.html#Quotas_and_Limits) estados * tamaño máximo de objeto: 2 gigabytes *. No sé cuándo cambió, pero sigue siendo una buena noticia :) – voyager

1

Thomas L La respuesta de Holaday es la respuesta correcta, supongo.De todos modos, por si acaso, aquí hay un enlace a Amazon Web Services SDK para App Engine (Java), que puede usar, p. para cargar archivos desde App Engine a Amazon S3. (Editar: Oh, sólo se dio cuenta - exceptuando S3) http://apetresc.wordpress.com/2010/06/22/introducing-the-gae-aws-sdk-for-java/

Escrito por Adrian Petrescu. De su sitio web:

[ Es] una versión de los Servicios Web de Amazon SDK para Java que se ejecutará desde el interior de Google App Engine. Esto no trabajo si simplemente se incluyen el JAR que AWS ofrece directamente en WAR de GAE, porque el modelo de seguridad de GAE no permite que los campos comunes de Apache HTTP cliente para crear las tomas de corriente y redes primitivas de bajo nivel cambia requiere establecer una conexión HTTP ; en su lugar, Google requiere que realice todas las conexiones a través de su utilidad URLFetch

+0

Gracias por el saludo;) –

+0

Además, debería tener en cuenta que hay buenas posibilidades de que funcione con S3 también. Pruébelo simplemente quitando el filtro del archivo build.xml y probándolo. Me gustaría saber cuáles son los resultados. –