Можно ли получить вложение электронной почты в Blobstore App Engine? - PullRequest
6 голосов
/ 28 марта 2010

Мне удалось получить вложения электронной почты на Amazon S3 из входящей электронной почты GAE, но кто-нибудь знает методику вложения, например изображения, в blobstore.

Любая помощь будет высоко ценится.

Код до сих пор (с помощью Алекса)

upload_url = blobstore.create_upload_url('/upload')
msg = MIMEMultipart()
msg.set_type('multipart/form-data')
msg.set_payload({'file': content})
result = urlfetch.fetch(upload_url, payload=urllib.urlencode(msg), method=urlfetch.POST, headers={'Content-Type': 'multipart/form-data'})

Ответы [ 2 ]

11 голосов
/ 28 марта 2010

Чтобы получать почту в вашем приложении GAE, следуйте документации здесь : в частности, вы получите экземпляр класса InboundEmailMessage с атрибутом attachments, который я цитирую:

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

Затем, в этих документах GAE , вы «создаете URL загрузки» и в своем обработчике загрузки (обычно подкласс BlobstoreUploadHandler ) вы используете get_upload для получения BlobInfo экземпляров и поместите их метаданные куда-нибудь, что позже позволит вам получить их обратно, как может потребоваться вашему приложению.

Наконец, вы POST данных (которые у вас есть от attachments, выше) к вашему собственному недавно сгенерированному «URL для загрузки», например, использование urlfetch.fetch method-POST и полезной нагрузкой в ​​стандартной кодировке application/x-www-form-urlencoded для «формы», которую пользователь будет заполнять, если они загружают данные напрямую, что является «нормальным» способ поместить данные в хранилище больших двоичных объектов - например, вы можете использовать urllib.urlencode для подготовки полезной нагрузки).

То, что "self-POST" будет использовать другой экземпляр вашего приложения для "получения" данных в хранилище BLOB-объектов (в то время как экземпляр, получивший письмо, ожидает, так как fetch является синхронным).

2 голосов
/ 31 марта 2011

App Engine (версия 1.4.3) позволяет напрямую записывать данные в blobstore .
Вам больше не нужно использовать метод загрузки URL.

...