Обслуживаете большие сгенерированные файлы с помощью Google App Engine? - PullRequest
2 голосов
/ 17 января 2011

В настоящее время у меня есть приложение GAE, которое выполняет некоторую автономную обработку (резервное копирование данных пользователя) и генерирует файл, который находится где-то в районе 10–100 МБ.Я не уверен, что лучше всего передать этот файл пользователю.Два варианта, которые я рассматриваю:

  1. Добавление некоторого кода в код автономной обработки, который «подделывает» его при загрузке формы в хранилище BLOB-объектов и проходит через обычный процесс хранилища BLOB-объектовчтобы обслуживать файл.

  2. Имея код автономной обработки, сохраните файл где-нибудь вне GAE и оттуда отправьте.

Есть лигораздо лучше подход я пропускаю?Я предполагаю, что это функциональность, которая не очень подходит для GAE.Я думал о сохранении в хранилище данных как db.Text или Dd.Blob, но там я сталкиваюсь с ограничением в 1 МБ.

Любой ввод будет оценен,

Ответы [ 4 ]

3 голосов
/ 18 января 2011

Я думаю, что хранить его в интернет-магазине через форму сообщения - ваш лучший доступный на данный момент вариант.У нас есть планы по внедрению программной записи в Blobstore, но она еще не готова.

2 голосов
/ 17 января 2013

Нужно отметить, что с некоторого времени вы можете использовать экспериментальную версию хранилища BLOB-объектов для записи файлов .

Затем вы можете загрузить файл, используя симпатичный BlobstoreDownloadHandler

1 голос
/ 17 января 2011

Я бы придерживался первого варианта.Подготовка большого двоичного объекта потребует некоторого дополнительного кодирования, но API хранилища больших двоичных объектов позволяет обслуживать диапазоны байтов файла:

http://code.google.com/appengine/docs/python/blobstore/overview.html#Serving_a_Blob

Вам не нужно будет реализовывать обслуживание файловых блоков самостоятельно.

0 голосов
/ 17 января 2011

Есть какой-то подход, который вы пропускаете, хотя я не уверен, что он намного лучше:

Разделите данные на множество кусков по 1 МБ и получите индивидуальные запросы на передачу кусков.

Это потребует сотрудничества со стороны внешних приложений для фактического получения данных в виде фрагментов; Возможно, вы захотите использовать заголовок HTTP Range для поддержания иллюзии одного файла. Затем создайте другой объект, который хранит идентификаторы всех отдельных блоков.

...