是否可以使用GAE直接邮寄上传的二进制文件?

时间:2013-07-06 13:05:50

标签: python google-app-engine email

我正在使用python GAE,我想将用户发布的文件邮寄到服务器。

我可以这样做(我认为)首先将文件存储到BlobStore,然后从Blobstore中检索它,邮寄并从BlobStore中删除它。

是否可以在不使用BlobStore的情况下完成?

我有这段代码

up = self.request.POST.multi['upfile']
mail.send_mail(from_address, to_address, subject, body,
              attachments=[(up.filename, up.file.read())])

它适用于文本文件,但使用二进制文件可以减少内容 例如,原始png文件的十六进制转储是:

        00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
000000  89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 .PNG........IHDR
000010  00 00 00 40 00 00 00 28 08 02 00 00 00 C1 AC 6B ...@...(.......k
000020  BE 00 00 00 01 73 52 47 42 00 AE CE 1C E9 00 00 .....sRGB.......
000030  00 09 70 48 59 73 00 00 0B 13 00 00 0B 13 01 00 ..pHYs..........
000040  9A 9C 18 00 00 00 07 74 49 4D 45 07 DD 05 0F 11 .......tIME.....
000050  05 38 BA 66 BF EB 00 00 00 19 74 45 58 74 43 6F .8.f......tEXtCo
000060  6D 6D 65 6E 74 00 43 72 65 61 74 65 64 20 77 69 mment.Created wi
000070  74 68 20 47 49 4D 50 57 81 0E 17 00 00 00 1D 49 th GIMPW.......I
000080  44 41 54 58 C3 ED C1 01 01 00 00 00 82 20 FF AF DATX......... ..
000090  6E 48 40 01 00 00 00 00 00 00 F0 64 1E 28 00 01 nH@........d.(..
0000A0  D2 35 20 CA 00 00 00 00 49 45 4E 44 AE 42 60 82 .5 .....IEND.B`.

上传,邮寄和下载的十六进制转储是:

        00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
000000  89 50 4E 47 0D 0A 1A 0D 0A 2D 2D 3D 3D 3D 3D 3D .PNG.....--=====
000010  3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 30 36 38 30 38 34 ==========068084
000020  32 39 32 39 3D 3D 2D 2D 2D 2D 3D 3D 3D 3D 3D 3D 2929==----======
000030  3D 3D 3D 3D 3D 3D 3D 3D 3D 30 36 38 30 38 34 32 =========0680842
000040  39 32 39 3D 3D 2D 2D 929==--

我是Python的新手,所以即使是基础知识我也许会错。

如果是二进制文件,使用read()读取文件是错误的吗? (当我在文件系统上做它时看起来很好) 或者像我一样在GAE上发送二进制数据是错误的吗? (根据需要,它不是字节串吗?)

1 个答案:

答案 0 :(得分:0)

Google App Engine从文件扩展名中推断出mime类型。您是否检查过电子邮件标题以确保电子邮件中提供了正确的mime类型以确保其编码正确?

https://developers.google.com/appengine/docs/python/mail/attachments