2009-06-09 5 views
6

Je sais que cela a déjà été demandé mais il n'y a vraiment pas de réponse claire. Mon problème est que j'ai construit un script de téléchargement de fichiers pour GAE et que je n'ai découvert qu'après, que vous pouvez seulement stocker des fichiers jusqu'à aprox. 1 Mo dans le magasin de données. Je peux vous arrêter ici si vous pouvez me dire que si j'active la facturation, la limite de 1 Mo est l'historique mais j'en doute.Uploads de fichiers Google App Engine et Amazon S3

Je dois être en mesure de télécharger jusqu'à 20 Mo par fichier, alors j'ai pensé que je pourrais peut-être utiliser le S3 d'Amazon. Des idées sur la façon d'accomplir cela?

On m'a dit d'utiliser une combinaison de GAE + Ec2 et S3 mais je n'ai aucune idée de comment cela fonctionnerait.

Merci, Max

Répondre

13

De l'Amazon S3 documentation:

  1. L'utilisateur ouvre un navigateur Web et accès votre page web

  2. Votre page Web contient un formulaire HTTP contenant toutes les informations nécessaires pour que l'utilisateur télécharge du contenu sur Amazon S3.

  3. L'utilisateur télécharge le contenu directement sur Amazon S3.

GAE prépare et sert la page Web, une opération rapide. Votre utilisateur télécharge vers S3, une opération longue, mais entre le navigateur de votre utilisateur et Amazon; GAE n'est pas impliqué.

Une partie du protocole S3 est un success_action_redirect, qui vous permet de dire à S3 où viser le navigateur en cas de téléchargement réussi. Cette redirection peut être à GAE.

+0

Ok sonne bien et je vais certainement le faire comme ça. Comment iriez-vous si vous vouliez stocker des informations sur le fichier sur GAE Data Store? Comme l'utilisateur qui l'a stocké et le mime-type par exemple? – mistero

+0

Stockez ces informations lorsque l'utilisateur demande la page "rediriger". Vous pouvez faire une requête HEAD sur le fichier nouvellement téléchargé pour récupérer les métadonnées, si nécessaire. –

+0

Qu'en est-il des problèmes de sécurité? Je veux dire qu'il n'y a aucun moyen de valider les données (sauf AJAX) dans le formulaire avant de le soumettre à S3 droit? Donc, fondamentalement, si je définis le maximum. taille de fichier dans le formulaire comme Amazons suggère que vous pouvez simplement écrire votre propre formulaire et télécharger dans mon seau? Et les méta-données que j'ajouterais dans le formulaire peuvent également être facilement modifiées ... – mistero

3

Google App Engine et EC2 sont des concurrents. Ils font la même chose, bien que GAE fournisse un environnement pour que votre application s'exécute avec des restrictions de langage strictes, tandis que EC2 vous fournit une machine virtuelle (pensez à VMWare) sur laquelle héberger votre application.

S3 d'autre part est un api de stockage brut. Vous pouvez utiliser une API SOAP ou REST pour y accéder. Si vous voulez rester avec GAE, vous pouvez simplement utiliser le Amazon S3 Python Library pour faire des appels REST de Python à S3.

Vous devrez, bien sûr, payer pour l'utilisation sur S3. C'est incroyable combien leur facturation est granulaire. Au début, j'ai été littéralement facturé 4 cents par mois.

+0

Bon, jusqu'ici ça va. Mais si j'ai un fichier de 20 Mo et que j'utilise l'Amazon S3 Python Library pour envoyer ce fichier à S3 ... GAE ne va pas tuer le processus car il prend plus de 30 secondes? – mistero

+0

Pour être honnête, je ne connais pas vraiment les limites de GAE, je l'ai juste regardé brièvement et ses défauts étaient évidents et limitants pour mes usages particuliers. Pour être honnête, en dehors du fait qu'ils ont une édition gratuite disponible, je vois très peu à recommander. – Serapth

+4

Je suis sûr qu'il savait déjà tout cela - et ce n'est pas ce qu'il demandait. –

2

Pour référence future, Google a ajouté la prise en charge du téléchargement de fichiers volumineux (jusqu'à 50 Mo): La nouvelle fonctionnalité a été publiée dans le cadre du et fait l'objet de la rubrique here.

+1

[Ce lien] (http://code.google.com/appengine/docs/python/blobstore/overview.html#Quotas_and_Limits) indique * taille maximale de l'objet: 2 gigaoctets *. Je ne sais pas quand cela a changé, mais c'est quand même une bonne nouvelle :) – voyager

1

La réponse de Thomas L Holaday est la bonne réponse, je suppose.De toute façon, juste au cas où, voici un lien vers Amazon Web Services SDK pour App Engine (Java), que vous pouvez utiliser par exemple. transférer des fichiers d'App Engine vers Amazon S3. (Edit: Oh, juste remarqué - sauf S3) http://apetresc.wordpress.com/2010/06/22/introducing-the-gae-aws-sdk-for-java/

Écrit par Adrian Petrescu. De son site web:

[Il est] une version du Web Services Amazon SDK pour Java qui se déroulera à l'intérieur de Google App Engine. Ce ne serait pas travail si vous avez simplement inclus le JAR que AWS fournit directement dans WAR de GAE, parce que le modèle de sécurité de GAE ne permet pas aux Apache Commons HTTP client pour créer les prises et primitives de réseau à faible niveau il nécessite d'établir une connexion HTTP ; à la place, Google exige vous de faire toutes les connexions par son utilité URLFetch

+0

Merci pour ce commentaire;) –

+0

Aussi, je devrais noter, qu'il y a une chance décente que cela fonctionne également avec S3. Essayez-le simplement en supprimant le filtre du fichier build.xml et en le testant. Je serais curieux de savoir quels sont les résultats. –

Questions connexes