Próbuję przesłać dane do Google App Engine (przy użyciu GWT). Używam widżetu FileUploader, a serwlet używa obiektu InputStream do odczytywania danych i wstawiania ich bezpośrednio do magazynu danych. Działając lokalnie, mogę przesyłać duże pliki z powodzeniem, ale kiedy wdrażam je do GAE, jestem ograniczony przez 30-sekundowy czas żądania. Czy jest jakiś sposób obejścia tego? Czy jest jakiś sposób, że mogę podzielić plik na mniejsze części i wysłać mniejsze fragmenty?Wysyłanie plików za pomocą Google App Engine
Odpowiedz
musisz przesłać dane do innego serwera - uważam, że nie można przepracować 30-sekundowego limitu czasu. Jeśli jest jakiś sposób, popraw mnie! Chciałbym wiedzieć jak!
Obecnie GAE nakłada limit 10 MB na przesyłanie plików (i rozmiar odpowiedzi), a także limity 1 MB na wiele innych rzeczy; więc nawet gdybyś miał wystarczająco szybkie połączenie sieciowe, aby przepompować więcej niż 10 MB w oknie 30 s, nie byłoby to możliwe. Google powiedział (słyszałem, jak Guido van Rossum wspomniał wczoraj tutaj w Pycon Italia Tre), że planuje przezwyciężyć te ograniczenia w przyszłości (przynajmniej dla użytkowników GAE, którzy płacą za używanie w celu przekroczenia kwot - nie ma pewności, czy Plany rozciągają się na użytkowników GAE, którzy nie płacą, i generalnie muszą zaakceptować mniejsze kwoty, aby uzyskać swobodę korzystania z GAE).
http://googleappengine.blogspot.com/2010/12/happy-holidays-od-app-engine-team-140.html – theosp
Najbliższym, co można uzyskać, byłoby podzielenie go na kawałki podczas przechowywania go w GAE, a następnie po pobraniu go połączyć, wydając osobne żądania AJAX.
Zgadzam się z danymi dzielenia na mniejsze bloki i mam dwie tabele, jedna zawiera metadane (nazwa pliku, rozmiar, liczba pobrań, ... itd.) I inne zawiera porcje, te fragmenty są powiązane z tabelą metadanych przez klucz obcy, myślę, że jest to wykonalne ...
Lub po przesłaniu wszystkich fragmentów można je po prostu umieścić w jednym bloku zawierającego jeden stół.
Ale jest problem, trzeba będzie gruby klienta, aby służyć wyrwy-danych, jak aplety Java, który musi być podpisany i zaufanie klientów, dzięki czemu można uzyskać dostęp lokalny system plików
Jeśli twoja prośba kończy się na żądanie, niewiele możesz zrobić. Być może twoje pliki są zbyt duże i będziesz musiał je porwać na kliencie (z czymś takim jak Flash lub Java lub strukturą przesyłania, taką jak pupload).
Po pobraniu pliku do aplikacji pojawia się inny problem - ograniczenia magazynu danych. Tutaj masz dwie opcje:
Używając BlobStore masz 1 GB size limit i special handler, called unsurprisingly BlobstoreUpload Handler że nie powinno dać Timeout problemy na przesłaniu.
Sprawdź również http://demofileuploadgae.appspot.com/ (sourcecode, source answer), który spełnia dokładnie to, o co prosisz.
Sprawdź również resztę GWT-Examples.
Limit czasu odpowiedzi 30 sekund dotyczy tylko wykonywania kodu. Przesyłanie rzeczywistego pliku jako części treści żądania jest z tego wykluczone. Licznik uruchomi się dopiero wtedy, gdy żądanie zostanie w całości wysłane do serwera przez klienta, a twój kod zacznie obsługiwać przesłane żądanie. Dlatego nie ma znaczenia, jak wolne jest połączenie twojego klienta.
Uploading file on Google App Engine using Datastore and 30 sec response time limitation
- 1. Techniki paginacji za pomocą Google App Engine
- 2. Google App Engine Geohashing
- 3. Przesyłanie plików w Google App Engine
- 4. Pliki cookie za pomocą Pythona i Google App Engine
- 5. Google App Engine
- 6. Google App Engine: get_or_create()?
- 7. Google App Engine APNS
- 8. OpenID dla Google App Engine
- 9. Google App Engine kopiowanie nadawcy
- 10. Datanucleus za pomocą niewłaściwego wzmacniacza w Google App Engine 1.7
- 11. Czy mogę obsługiwać wielokrotne logowanie Google za pomocą App Engine?
- 12. Przeszukanie stron internetowych za pomocą Google App Engine
- 13. Google App Engine vs WebFaction
- 14. Google App Engine JDO 3
- 15. Google App Engine lub Django?
- 16. Google App Engine/_ah/zdrowie
- 17. web.py w Google App Engine
- 18. Google App Engine Konwerter PDF
- 19. Google App Engine modifyThreadGroup problemem
- 20. Retrolambda w Google App Engine
- 21. Google App Engine: Kontyngent Błąd
- 22. Google App Engine dziwne opóźnienie
- 23. Google App Engine wiele regionów
- 24. Google App Engine i przesyłanie plików Amazon S3
- 25. Google Cloud Datastore vs Google App Engine
- 26. Maksymalny rozmiar kodu dla Google App Engine
- 27. Przechowywanie danych w aplikacji Google App Engine
- 28. Google App Engine jako platforma produkcyjna
- 29. Błąd Google App Engine 503 - Usługa niedostępna
- 30. Eclipse Google-APP -Engine "nie będzie Enhance"
Tego się bałem. Sądzę, że nie jest tak źle ... Mógłbym po prostu użyć Amazon S3 do przechowywania. Przypuszczam, że uprościłoby to część do przechowywania, ale nadal byłoby miło zachować wszystko w tym samym miejscu. – user103920