6

我已经设法从 GAE 传入的电子邮件中将电子邮件附件获取到 Amazon S3,但是有没有人知道将附件(如图像)获取到 blobstore 的技术。

任何帮助将非常感激。

到目前为止的代码(在 Alex 的帮助下)

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'})
4

2 回答 2

11

要在您的 GAE 应用程序中接收邮件,请遵循此处的文档:特别是,您将获得一个InboundEmailMessage具有attachments属性的类实例,我引用该属性:

是文件附件列表,可能为空。列表中的每个值都是两个元素的元组:文件名和文件内容。

然后,根据这些 GAE 文档,您“创建一个上传 URL”,并在您的上传处理程序(通常是BlobstoreUploadHandler的子类)中get_upload用于获取BlobInfo实例并将它们的元数据放在某个地方,以便稍后让您根据应用程序可能需要取回它们.

最后,您POST将数据(您从attachments上面 获得的数据)添加到您自己新生成的“上传 URL”,例如使用urlfetch.fetch(带有method-POST标准application/x-www-form-urlencoded编码的有效负载,用于用户将填写的“表单”,如果他们直接上传数据,这是将数据放入 blobstore 的“正常”方式——例如,您可以使用urllib.urlencode来准备有效负载)。

该“self-POST”将使用您的应用程序的另一个实例将数据“接收”到 blobstore 中(而接收电子邮件的实例等待,因为fetch是同步的)。

于 2010-03-27T23:03:47.377 回答
2

App Engine(1.4.3 版)允许您直接将数据写入 blobstore
您不再需要使用上传 url 方法。

于 2011-03-30T21:54:06.200 回答