Base64解码并写入Python中的文件,通过cgi发送Base64-String.现场存储



我想将图像文件保护到服务器文件夹。我通过cgi接收图像。现场存储。地址和 Base64 字符串如下所示:

http://localhost/upload.py?data={"base64" : "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"}

据我所知,Python 对 RFC 3548 或 RFC 4648 使用标准的"Base64"编码,所以字符串应该没问题。

我尝试以下代码:

def getParam():
     import json
     import cgi
     form3 = cgi.FieldStorage()
     form2 = form3["data"].value
     form1 =json.loads(form2)
     return(form1) 
a = getParam()
import base64
print(a["base64"])
imgdata = base64.b64decode(a["base64"])
print("----------------------------------------------")
print(imgdata)
filename = '/var/www/images/some_image.jpg'
t = open(filename, "wb")
t.write(base64.b64decode(a["base64"]))
t.close()
print(filename)

如果我执行的响应是

/9j/4AAQSkZJRgABAQEAYABgAAD/4QEMRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAFgABkoYABwAAAOAAAAAkVU5JQ09ERQAASQBtAGEAZwBlACAAbABpAGMAZQBuAHMAZQBkACAAdABvACAAWgBhAHoAegBsAGUAIABJAG4AYwAuACAAQQBsAGwAIAB1AG4AYQB1AHQAaABvAHIAaQB6AGUAZAAgAHUAcwBlACAAaQBzACAAcAByAG8AaABpAGIAaQB0AGUAZAAuACAAZABlADAANgA0ADgAYgA0AC0ANwA4AGYAYgAtADQANQBkADIALQA4ADcANgBiAC0AZABkADYAOQA4ADgAYQAwADcAMgA4ADAAAAAAAAAAAAAAAAD/2wBDAAQDAwQDAwQEAwQFBAQFBgoHBgYGBg0JCggKDw0QEA8NDw4RExgUERIXEg4PFRwVFxkZGxsbEBQdHx0aHxgaGxr/2wBDAQQFBQYFBgwHBwwaEQ8RGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhr/wAARCAAyADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 Tl5ufo6erx8vP09fb3 Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 Pn6/9oADAMBAAIRAxEAPwD7 orj7Y6tqk19Kut3NpHHeTQpFFBCVVUcqOWQnt61S8TX154W0K91bUPEl/5FrGXKi3tsseyj931J4qZSUIuUnZIqMXJqK3Z3tFeJ3/xF1CDwTZ JtP1DVrwXGWa18m2V40U4dj 6PAyPzFdnoN1deJNItNU0vxRfS2t1GHQ/Z7bI9Qf3fBB4NYU8TRqy5ISu7J/J9TSdCpTjzSWl7fM7miuX/s3Vv hkvv8AwHtv/jdV9QttYsrG5uE8RXjtDEzhWt7fBIGcHEftXSYnYUVHbyGW3ikb7zoGP1IooA8Y134vaN4C1y20rVHw9/q9wszHgQxtIwEhPTAYDIOODntTPi5rPgvW7RdH8SeNrPQIbWdXuleQAMf4VYkgDkisjxX8FIviN4oOo6jevHpsF9dedAjEOxEjYC9gM47E9eeAK O9fvrWHWNbsfE8M012moNvjktyY0mi cQ7iNpbKk7T64xXzePxFem3TqU aEn57K19v1PZ4fwUsZVryrVFDltyapXbT730uuivqfROkePF8L Jp7uGWPVtFt/NhggSQNH5LbV3KRkNlI48duPevpjwvPpd1odpN4eihg0 Vd6RwqFVCeSMDgHJOfevzdvNJ11tHsbfw9eQ6Lc20iOCowuF/hIGQRnmvZvh5 0Fr3gbTY9P16Oz1iMSN5kxX7OxKqoZuPlHI6Ae/UmvJyzMqWHcvazum3ZWu0fT43h3HVkuWnZpLdpJ/ifalUNb/wCQNqH/AF7Sf gmvK/C37Sfg3xCkIu5J9LmkjWQLMmV2t0O4dvriu m8T6PrmiXzaRqdpeBreTAimDH7p7V9hSxeHr/AMOaf5/cfH4jL8Xhf41Npd7affsddZf8edv/ANcl/lRSWBzY23/XJP5Ciuo885ezum0qW/gu7O LNezyqYrOSVSruWUhlBHQ/hXkV/8AA7QL/wAet4jlu/ER02XVV1ifRW0p2t5LwAfPkpnaSoJXnPPrX0bRSaT3Gm1qjyu78F CL0kz EJMnqU0iZP/AEFRXG M/gb4G8T6M1np iXuk3QmWZLj yJ7hcjgq0bDDKQenHOD2r6GornWFw6lzKCv6I7Hj8XKDg6srPpd2/M8H0D4QfD/AEHS9PtJfDeoXk9raRW8lw n3QM2xcbioGBnk47Zrcbw14PsbaX x/Cs8N6sbeQ40ifcHwcYYrxXrlFCwuHi ZU1f0Q5Y/GSjySqya7cz/zK1jHJFY20ci4dIlVh7gCirNFdJwhRRRQAUUUUAFFFFABRRRQB/9k=
----------------------------------------------
b'xffxd8xffxe0x00x10JFIFx00x01x01x01x00`x00`x00x00xffxe1x01x0cExifx00x00MMx00*x00x00x00x08x00x01x87ix00x04x00x00x00x01x00x00x00x16x00x01x92x86x00x07x00x00x00xe0x00x00x00$UNICODEx00x00Ix00mx00ax00gx00ex00 x00lx00ix00cx00ex00nx00sx00ex00dx00 x00tx00ox00 x00Zx00ax00zx00zx00lx00ex00 x00Ix00nx00cx00.x00 x00Ax00lx00lx00 x00ux00nx00ax00ux00tx00hx00ox00rx00ix00zx00ex00dx00 x00ux00sx00ex00 x00ix00sx00 x00px00rx00ox00hx00ix00bx00ix00tx00ex00dx00.x00 x00dx00ex000x006x004x008x00bx004x00-x007x008x00fx00bx00-x004x005x00dx002x00-x008x007x006x00bx00-x00dx00dx006x009x008x008x00ax000x007x002x008x000x00x00x00x00x00x00x00x00x00x00x00x00xffxdbx00Cx00x04x03x03x04x03x03x04x04x03x04x05x04x04x05x06nx07x06x06x06x06rtnx08nx0frx10x10x0frx0fx0ex11x13x18x14x11x12x17x12x0ex0fx15x1cx15x17x19x19x1bx1bx1bx10x14x1dx1fx1dx1ax1fx18x1ax1bx1axffxdbx00Cx01x04x05x05x06x05x06x0cx07x07x0cx1ax11x0fx11x1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1ax1axffxc0x00x11x08x002x002x03x01"x00x02x11x01x03x11x01xffxc4x00x1fx00x00x01x05x01x01x01x01x01x01x00x00x00x00x00x00x00x00x01x02x03x04x05x06x07x08tnx0bxffxc4x00xb5x10x00x02x01x03x03x02x04x03x05x05x04x04x00x00x01}x01x02x03x00x04x11x05x12!1Ax06x13Qax07"qx142x81x91xa1x08#Bxb1xc1x15Rxd1xf0$3brx82tnx16x17x18x19x1a%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzx83x84x85x86x87x88x89x8ax92x93x94x95x96x97x98x99x9axa2xa3xa4xa5xa6xa7xa8xa9xaaxb2xb3xb4xb5xb6xb7xb8xb9xbaxc2xc3xc4xc5xc6xc7xc8xc9xcaxd2xd3xd4xd5xd6xd7xd8xd9xdaxe1xe2xe19yxb9xfa:zxbc|xbcxfd=}xbdxcfx9fxafxfc@x01xf0x10x000x10x10x10x10x10x10x10x10x10x00x00x00x00x00x00x10 0@P`px80x90xa0xbfxfc@x0bQx10x00 x10 @@0@pP@@x00x10'px00x10 1x10@Rx13x10a$x15x10vx17x112#(x10x81D)x1ax1bx1cx10x9235/x01V'-x10xa1bCNx12_x11qx81x91xa2brx82x92xa3Scsx83x93xa44DTdtx84x94xa55EUeux85x95xa66FVfvx86x96xa77GWgwx87x97xa8(8HXhxx88x98xa9)9IYiyx89x99xaa*:JZjzx8ax9axab+;K[k{x8bx9bxac,<L\l|x8cx9cxad-=M]m}x8dx9dxae.>N^n~x8ex9exaf/?O_osxe7xebxffhx000x0cx04x00x08Dx0cDx00xfcx03xeex8axe3xedx8exadxaaM}*xebw6x91xc7y4)x14PBUUx1cxa8xe5x90x9exdexb5Kxc4xd7xd7x9ex16xd0xafumCxc4x97xfeExacexcax8b{lxb1xecxa3xf7}Ixe2xa6RPx8bx94x9dx92*1rj+vwxb4Wx89xdfxfcExd4 xf0Mx92m?Pxd5xafx05xc6Yxad|x9bexxd1Nx1dx8fxa3xc0xc8xfcxc5vzrxd5xd7x894x8bMSKxf1Exf4xb6xb7Qx87Cxf6{lx8fPx7fwxc1x07x83XSxc4xd1xab.HJxeexc9xfcx9fSIxd0xa9N<xd2Z^xdf3xb9xa2xb9x7fxecxdd[xe1x92xfbxfcx03x01xedxbfxf8xddWxd4-xb5x8b+x1bx9bx84xf1x15xe3xb413x85k{|x12x06pqx1fxb5tx98x9dx85x15x1dxbcx86[xxa4oxbcxe8x18xfdHxa2x80<c]xf8xbdxa3xx0b\xb6xd2xb5Gxc3xdfxeaxf7x0b3x1ex041xb4x8cx04x84xf4xc0`2x0e89xedLxf8xb9xacxf8/[xb4]x1fxc4x9e6xb3xd0!xb5x9d^xe9^@x03x1fxe1V$x809"xb2<Wxf0R/x88xde(:x8exa3zxf1xe9xb0_]yxd0#x10xecDx8dx80xbdx80xce;x13xd7x9ex00xa3xbd~xfaxd6x1dc[xb1xf1<3Mvx9ax83ox8eKrcIxa2qx0exe26x96xcax93xb4xfaxe3x15xf3xxfcEzmxd3xa9Fx84x9fx9excaxd7xdbxf5=x9ex1fxc1Kx19VxbcxabTPxe5xb7&xa9]xb4xfbxdfKxaex8axfax9fDxe9x1e<_x0b&x9exeex19cxd5xb4[x7f6x18 Ix03Gxe4xb6xd5xdcxa4d6R8xf1xdbx8fzxfacxc2xf3xe9wZx1dxa4xdex1ex8ax184Uxdex91xc2xa1Utxe4x8cx0ex01xc99xf7xafxcdxdbxcd']mx1exc6xdfxc3xd7x90xe8xb76xd2#x82xa3x0bx85xfex12x06Ax19xe6xbdx9bxe1xe7Akxdex06xd3cxd3xf5xe8xecxf5x88xc4x8dxe6LWxecxecJxaax86n>Qxc8xe8x07xbfRkxc9xcb3*Xw/k;xa6xddx95xaexd1xf4xf8xdex1dxc7VKx96x9dx9aKvx92x7fx89xf6xa5Pxd6xffxc0$rxa8x7fxc0x17xb4x9fx82kxcaxfc-xfbIxf87xc4)x08xbbx92}.i#Yx02xccx99]xadxd0xeex1dxbexb8xaex9bxc4xfa>xb9xa2_6x91xa9xda^x06xb7x93x02)x83x1fxba{Wxd8Rxc5xe1xebxfcx03x0eixfex7fqxf1xf8x8cxbfx17x85xfe56x97{ixf7xecuxd6_xf1xe7oxfcx03\x97xf9QI`scmxff\x93xf9n+xa8xf3xce^xcexe9xb4xa9oxe0xbbxb3x8b5xecxf2xa9x8axceITxabxb9e!x94x11xd0xfex15xe4Wxffx00x03xb4x0bxffx00x1exb7x88xe5xbbxf1x11xd3exd5WXx9fEm)xdaxdeKxc0x07xcfx92x99xdaJx82Wx9cxf3xeb_Fxd1Ixa4xf7x1amjx8f+xbbxf0Px8bxd2Lxc4$xc9xeaSHx99?xf0x04x15x15xc63xf8x1bxe0ox13xe8xcdgxa6%xeex93t&Yx92xe3xc8x9exe1r8*xd1xb0xc3)x07xa7x1cxe0xf6xafxa1xa8xaeux85xc3xa9s(+xfa#xb1xe3xf1rx83x83xab+>x97vxfcxcfx07xd0>x10|?xc0x10txbd>xd2_rxeax17x93xdaxdaEo%xc2}xd03l\n*x06x06y8xedx9axdcorx>xc6xda_x1fxc2xb3xc3zxb1xb7x90xe3Hx9fp|x1cax8axf1^xb9Ex0bx0bx87x89x955x7fD9cxf1x92x8f$xaaxc9xaexdcxcfxfcxcaxd61xc9x15x8dxb4r.x1d"Uaxeex00xa2xacxd1]'x08QEx14x00QEx14x00QEx14x00QEx14x01xffxd9'
/var/www/images/some_image.jpg

问题是我无法打开以这种方式生成的文件(不支持的标记类型 0x68)。为什么?

编辑:我刚刚意识到在加载字符串后+替换为

如果您通过地址栏移交数据,CC_3会自动转换为空白区域。只需 Base64-String 上的 string.replace(' ', '+'),你应该没问题。

最新更新