我正在使用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上发送二进制数据是错误的吗?(不是需要的字节串吗?)
发布于 2013-07-06 23:03:00
Google App Engine从文件扩展名推断出mime类型。您是否检查了电子邮件头以确保电子邮件提供了正确的mime类型,以确保其编码正确?
https://developers.google.com/appengine/docs/python/mail/attachments
https://stackoverflow.com/questions/17503260
复制相似问题