我正在使用 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 上发送二进制数据是错误的?(不是需要的字节串吗?)