2009-06-09 19 views
6

Wiem, że zostało to wcześniej zadane, ale tak naprawdę nie ma jednoznacznej odpowiedzi. Mój problem polega na tym, że stworzyłem skrypt do przesyłania plików dla GAE i dopiero potem dowiedziałem się, że możesz przechowywać pliki tylko do aprox. 1 MB w składnicy danych. Mogę Cię zatrzymać tutaj, jeśli możesz mi powiedzieć, że jeśli włączę rozliczanie, limit 1 MB to historia, ale wątpię w to.Google App Engine i przesyłanie plików Amazon S3

Potrzebuję być w stanie przesłać do 20 MB za plik, więc pomyślałem, że mogę używać Amazon S3. Wszelkie pomysły, jak to osiągnąć?

Powiedziano mi, że używam kombinacji GAE + Ec2 i S3, ale nie mam pojęcia, jak to zadziała.

Dzięki, Max

Odpowiedz

13

Z Amazon S3 documentation:

  1. Użytkownik otwiera przeglądarkę internetową i dostępy twoja strona internetowa.

  2. Twoja strona internetowa zawiera formularz HTTP, który zawiera wszystkie informacje niezbędne do przesłania zawartości do Amazon S3.

  3. Użytkownik przesyła zawartość bezpośrednio do Amazon S3.

GAE przygotowuje i obsługuje stronę internetową, szybką operację. Użytkownik przesyła do S3, długa operacja, ale odbywa się to między przeglądarką użytkownika a Amazon; GAE nie jest zaangażowany.

Część protokołu S3 to success_action_redirect, która pozwala poinformować S3, gdzie należy kierować przeglądarkę w przypadku pomyślnego przesłania. To przekierowanie może być w GAE.

+0

Ok brzmi świetnie i na pewno zrobię to w ten sposób. Jak posuniesz się naprzód, jeśli chcesz przechowywać informacje o pliku w sklepie danych GAE? Jak na przykład użytkownik, który je zapisał, i typ mime? – mistero

+0

Przechowuj te informacje, gdy użytkownik zażąda strony "przekierowanie". Możesz wysłać żądanie HEAD do nowo przesłanego pliku, aby pobrać metadane, jeśli to konieczne. –

+0

Co z kwestiami bezpieczeństwa? Chodzi mi o to, że nie ma sposobu na potwierdzenie danych (z wyjątkiem AJAX) w formularzu przed przesłaniem go do S3, prawda? Więc w zasadzie jeśli ustawię maks. rozmiar pliku w formularzu takim jak Amazon sugeruje, że możesz po prostu napisać swój własny formularz i przesłać go do mojego kubełka? I meta-dane, które dodaję w formularzu, mogą być łatwo modyfikowane ... – mistero

3

Google App Engine i EC2 są konkurenci. Robią to samo, chociaż GAE zapewnia środowisko do uruchamiania aplikacji z restrykcyjnymi ograniczeniami językowymi, podczas gdy EC2 zapewnia maszynę wirtualną (myślę, że VMWare), na której można umieścić swoją aplikację.

S3 z drugiej strony to api do przechowywania surowca. Możesz użyć interfejsu API SOAP lub REST, aby uzyskać do niego dostęp. Jeśli chcesz trzymać się GAE, możesz po prostu użyć Amazon S3 Python Library, aby wywoływać REST z Pythona do S3.

Będziesz oczywiście musiał zapłacić za korzystanie z S3. Zadziwiające, jak ziarniste są ich rachunki. Kiedy zaczynałem, dosłownie za cztery miesiące płaciłem 4 centy.

+0

Okay, na razie tak dobrze. Ale jeśli mam plik 20 MB i używam Python Library Amazon S3, aby wysłać ten plik do S3 ... czy GAE nie zabije procesu, ponieważ trwa to dłużej niż 30 sekund? – mistero

+0

Szczerze mówiąc, tak naprawdę nie znam ograniczeń GAE, po prostu na krótko się na to patrzyłem, a jego wady były oczywiste i ograniczające do moich konkretnych zastosowań. Szczerze mówiąc, poza tym, że mają dostępną wolną wersję, widzę bardzo mało, aby ją polecić. – Serapth

+4

Jestem prawie pewna, że ​​on już wiedział o tym wszystkim - i nie o to pytał. –

2

W celu późniejszego wykorzystania, Google dodało obsługę przesyłania dużych plików (do 50 MB): nowa funkcja została wydana jako część i jest omawiana jako here.

+1

[Ten link] (http://code.google.com/appengine/docs/python/blobstore/overview.html#Quotas_and_Limits) określa * maksymalny rozmiar obiektu: 2 gigabajty *. Nie wiem, kiedy to się zmieniło, ale to wciąż dobra wiadomość :) – voyager

1

Odpowiedź Thomasa L Holadaya jest poprawną odpowiedzią, tak przypuszczam.W każdym razie, na wszelki wypadek, oto link do Amazon Web Services SDK dla App Engine (Java), którego możesz użyć np. aby przesłać pliki z App Engine do Amazon S3. (Edit: Och, właśnie zauważyłem - wyjątkiem S3) http://apetresc.wordpress.com/2010/06/22/introducing-the-gae-aws-sdk-for-java/

Wpisany przez Adrian Petrescu. Z jego strony internetowej:

[Jest] wersja Amazon Web Services pakietu SDK for Java, który będzie uruchamiany od wewnątrz Google App Engine. To nie pracy, jeśli po prostu wliczone JAR że AWS dostarcza bezpośrednio do GAE za wojnie, bo wzór GAE za bezpieczeństwo nie zezwala na Commons Apache klienta do tworzenia gniazd i niskopoziomowe sieciowych prymitywów go wymaga ustanowienia połączenia HTTP ; zamiast tego Google wymaga do wykonania wszystkich połączeń za pomocą narzędzia URLFetch

+0

Dzięki za wiadomość;) –

+0

Należy również zauważyć, że istnieje spora szansa, że ​​będzie działać również z S3. Wypróbuj go, usuwając filtr z pliku build.xml i testując go. Byłbym ciekawy, jakie są wyniki. –