2009-06-09 18 views
6

so che questo è stato chiesto prima, ma non c'è davvero una risposta chiara. Il mio problema è che ho costruito uno script upload di file per GAE e solo scoperto dopo, che si può solo archiviare i file fino a ca.. 1 MB nell'archivio dati. Posso fermarti qui se puoi dirmi che se abilito la fatturazione il limite di 1 MB è storico ma ne dubito.Google App Engine e Amazon S3 caricamento di file

Ho bisogno di essere in grado di caricare fino a 20 MB per file, quindi ho pensato che forse posso usare Amazon S3. Qualche idea su come realizzare questo?

Mi è stato detto di utilizzare una combinazione di GAE + Ec2 e S3 ma non ho idea di come funzioni.

Grazie, Max

risposta

13

Dal Amazon S3 documentation:

  1. L'utente apre un browser web e accessi la tua pagina web.

  2. La pagina Web contiene un modulo HTTP che contiene tutte le informazioni necessarie all'utente per caricare il contenuto su Amazon S3.

  3. L'utente carica il contenuto direttamente su Amazon S3.

GAE prepara e serve la pagina Web, un'operazione rapida. L'utente carica su S3, una lunga operazione, ma ciò avviene tra il browser dell'utente e Amazon; GAE non è coinvolto.

Parte del protocollo S3 è un success_action_redirect, che consente di dire a S3 dove puntare il browser in caso di un caricamento riuscito. Questo reindirizzamento può essere GAE.

+0

Ok suona bene e lo farò sicuramente in questo modo. Come procederesti se volessi memorizzare informazioni sul file su GAE Data Store? Come l'utente che l'ha memorizzato e il tipo mime ad esempio? – mistero

+0

Memorizza le informazioni quando l'utente richiede la pagina 'reindirizzamento'. È possibile eseguire una richiesta HEAD sul file appena caricato per recuperare i metadati, se necessario. –

+0

E i problemi di sicurezza? Voglio dire, non c'è modo di convalidare i dati (tranne AJAX) nel modulo prima di inviarlo a S3, giusto? Quindi in pratica se imposto il massimo. la dimensione del file nel formato come Amazons suggerisce che puoi semplicemente scrivere il tuo modulo e caricarlo nel mio secchio? E i meta-dati che aggiungerei nel modulo possono anche essere facilmente modificati ... – mistero

3

Google App Engine e EC2 sono concorrenti. Fanno la stessa cosa, anche se GAE fornisce un ambiente per la vostra applicazione per l'esecuzione in con severe restrizioni linguistiche, mentre EC2 si fornisce una macchina virtuale (si pensi VMWare) su cui ospitare la vostra applicazione.

S3 invece è un'API storage raw. Puoi usare un'API SOAP o REST per accedervi. Se si vuole attaccare con GAE, si può semplicemente utilizzare il Amazon S3 Python Library per fare REST chiamate da Python a S3.

Dovrai, ovviamente, pagare per l'utilizzo su S3. È incredibile quanto sia granulare la loro fatturazione. Al momento di iniziare sono stato letteralmente accusato di 4 centesimi al mese.

+0

Ok, finora tutto bene. Ma se ho un file da 20 MB e utilizzo la libreria Python Amazon S3 per inviare quel file a S3 ... GAE non ucciderà il processo perché impiega più di 30 secondi? – mistero

+0

A dire il vero, non conosco davvero i limiti di GAE, l'ho solo guardato brevemente e le sue imperfezioni erano ben visibili e limitanti per i miei particolari usi. Per essere onesti, al di fuori del fatto che abbiano a disposizione una versione gratuita, vedo ben poco da consigliarlo. – Serapth

+4

Sono abbastanza sicuro che sapesse già tutto questo e non è quello che stava chiedendo. –

2

Per riferimento futuro, Google ha aggiunto il supporto per il caricamento di file di grandi dimensioni (fino a 50 MB): la nuova funzione è stata rilasciata come parte di ed è discussa here. La risposta di

+1

[Tale link] (http://code.google.com/appengine/docs/python/blobstore/overview.html#Quotas_and_Limits) indica * dimensione massima dell'oggetto: 2 gigabyte *. Non so quando è cambiato, ma è ancora una buona notizia :) – voyager

1

Thomas L Holaday è la risposta corretta, suppongo.Ad ogni modo, nel caso, ecco un link all'SDK di Amazon Web Services per App Engine (Java), che puoi utilizzare ad es. per caricare file da App Engine su Amazon S3. (Edit: Oh, appena notato - eccezione S3) http://apetresc.wordpress.com/2010/06/22/introducing-the-gae-aws-sdk-for-java/

Scritto da Adrian Petrescu. Dal suo sito web:

[È] una versione del Amazon Web Services SDK per Java che verrà eseguito dall'interno di Google App Engine. Questo non sarebbe lavoro se hai incluso semplicemente il JAR che AWS fornisce direttamente nella guerra di GAE, in quanto modello di sicurezza di GAE non consente ai Comuni di Apache HTTP client per creare le prese e primitive di rete di basso livello IT richiede di stabilire una connessione HTTP ; invece, Google richiede per effettuare tutte le connessioni tramite la sua utilità URLFetch

+0

Grazie per l'urlo;) –

+0

Inoltre, dovrei notare che c'è una buona possibilità che funzioni anche con S3. Fai un tentativo semplicemente rimuovendo il filtro dal file build.xml e provandolo. Sarei curioso di sapere quali sono i risultati. –