2013-12-18 3 views
0

Я хочу загрузить изображение в blobstore, потому что я хочу поддерживать файлы размером более 1 МБ. Теперь единственный способ, которым я могу найти, - это клиенту выдать POST, где он отправляет метаданные, такие как геопозиционирование, теги и что-нет, которые сервер помещает в объект. В этом объекте сервер также кладет ключ blob, где фактические данные изображения будут сохранены, и сервер завершает запрос, возвращая клиенту URL-адрес, возвращаемый create_upload_url(). Это прекрасно работает, однако я могу получить несогласованность, например, если второй запрос никогда не выдается, и, следовательно, blob никогда не заполняется. Сущность теперь указывает на пустой капли.Google App Engine: загружать файл и другие поля по тому же запросу

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

+0

Клиент? Какой клиент: приложение или форма? – voscausa

+0

все в порядке в соответствии с логикой. может быть мобильным приложением, скриптом python, запущенным на оболочке, или чем-то запущенным в браузере (например, js). – marcorossi

+0

Вы должны отправить многостраничную почту в URL-адрес для загрузки. – voscausa

ответ

1

Я прошел точно такой же процесс мышления, но на Java, и в итоге использовал Apache Commons FileUpload. Я не знаком с Python, но вам просто нужен способ обработки загрузки multipart/form-data.

Я загружаю изображение и свои дополнительные поля вместе, используя JQuery для сборки данных многочастной формы, которые я затем POST на свой сервер.

На стороне сервера я затем беру файл и записываю его в Google Cloud Storage с помощью Google Cloud Storage client library (ссылка Python). Это можно сделать одним куском или «потоковым», если это большой файл. После того, как вы в GCS, ваше приложение App Engine может прочитать его с использованием той же библиотеки или вы можете напрямую его обслуживать с помощью общедоступного URL-адреса, в зависимости от установленного ACL.

Смежные вопросы