Google App Engine Загрузка больших файлов - PullRequest
15 голосов
/ 09 мая 2009

Я пытаюсь загрузить данные в Google App Engine (используя GWT). Я использую виджет FileUploader, а сервлет использует InputStream для чтения данных и вставки непосредственно в хранилище данных. Запуская его локально, я могу успешно загружать большие файлы, но при развертывании его в GAE я ограничен 30-секундным временем запроса. Есть ли способ обойти это? Или есть ли способ, которым я могу разбить файл на более мелкие порции и отправить меньшие порции?

Ответы [ 7 ]

8 голосов
/ 12 сентября 2010

Используя BlobStore , вы получаете ограничение размера *1003* 1 ГБ * и специальный обработчик , который неудивительно называется BlobstoreUpload Handler , который не должен вызывать проблем с таймаутом загрузить.

Также проверьте http://demofileuploadgae.appspot.com/ ( исходный код , исходный ответ ), который делает именно то, что вы спрашиваете.

Кроме того, посмотрите остальные GWT-Примеры .

8 голосов
/ 10 мая 2009

В настоящее время GAE накладывает ограничение на загрузку файла (и размер ответа) в 10 МБ, а также на многие другие ограничения в 1 МБ; поэтому, даже если у вас достаточно быстрое сетевое соединение, чтобы за 30 секунд накачать больше 10 МБ, это будет бесполезно. Google сказал (я слышал, что Гвидо ван Россум упомянул, что вчера здесь, на Pycon Italia Tre), что он планирует преодолеть эти ограничения в будущем (по крайней мере для пользователей GAE, которые платят за использование, чтобы превысить квоты - не уверен, что планы распространяются на пользователей GAE, которые не платят, и, как правило, должны принять меньшие квоты, чтобы получить бесплатное использование GAE).

1 голос
/ 12 октября 2013

Ограничение времени ответа 30 секунд относится только к выполнению кода. Таким образом, загрузка фактического файла как части тела запроса исключается из этого. Таймер запустится только после того, как клиент полностью отправит запрос на сервер, и ваш код начнет обрабатывать отправленный запрос. Следовательно, не имеет значения, насколько медленным является соединение вашего клиента.

Загрузка файла в Google App Engine с использованием хранилища данных и ограничение времени ответа 30 секунд

1 голос
/ 09 мая 2009

вам нужно будет выполнить загрузку на другой сервер - я считаю, что 30-секундный тайм-аут не может быть решен. Если есть способ, пожалуйста, поправьте меня! Я хотел бы знать, как!

0 голосов
/ 09 февраля 2010

Если в вашем запросе заканчивается время запроса, вы мало что можете сделать. Возможно, ваши файлы слишком велики, и вам нужно будет разделить их на клиенте (с помощью чего-то вроде Flash или Java или инфраструктуры загрузки, например pupload ).

Как только вы получаете файл в приложение, возникает другая проблема - ограничения хранилища данных. Здесь у вас есть два варианта:

  • вы можете использовать сервис BlobStore , который имеет довольно хороший API для обработки больших загрузок 50 мегабайт

  • вы можете использовать что-то вроде bigblobae , которое может хранить практически неограниченные по размеру капли в обычном хранилище данных appengine.

0 голосов
/ 26 декабря 2009

Я бы согласился с тем, что данные разбиваются на более мелкие BLOB-объекты и имеют две таблицы: одна содержит метаданные (имя файла, размер, количество загрузок и т. Д.), А другая содержит порции, эти порции связаны с таблицей метаданных внешний ключ, я думаю, что это выполнимо ...

Или, когда вы загружаете все куски, вы можете просто собрать их в один шарик с одним столом.

Но проблема в том, что вам понадобится толстый клиент для обслуживания чанкованных данных, такой как Java-апплет, который должен быть подписан и доверен вашим клиентам, чтобы иметь доступ к локальной файловой системе

0 голосов
/ 25 мая 2009

Самое близкое, что вы могли бы получить, - это разбить его на куски при хранении в GAE, а затем при загрузке собрать воедино, выполнив отдельные запросы AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...