使用python2.7将图片手动存储到mongo db

使用python2.7将图片手动存储到mongo db,python,mongodb,arduino,Python,Mongodb,Arduino,我需要传输带有多个HTTP帖子的.png图片,Arduino无法一次发送。在服务器端,我需要将该图片以多个条目存储到Mongo DB。然后,我需要能够重新组装并在网站上显示它 这是我离线处理的方法: f = open("icon.png", "rb").read() length = len(f) chunk1 = base64.b64encode( f[length/2:] ) chunk2 = base64.b64encode( f[:length/2] ) //Store to db /

我需要传输带有多个HTTP帖子的.png图片,Arduino无法一次发送。在服务器端,我需要将该图片以多个条目存储到Mongo DB。然后,我需要能够重新组装并在网站上显示它

这是我离线处理的方法:

f = open("icon.png", "rb").read()
length = len(f)
chunk1 = base64.b64encode( f[length/2:] )
chunk2 = base64.b64encode( f[:length/2] )

//Store to db
//Retrieve from db into chunk1, chunk2
//Here is the simple idea behind what I want to do(which works fine if I store and retrieve the entire image in one db entry):

html_img = '<img src="data:image/png;base64,{0}{1}">'.format(chunk1.decode(), chunk2.decode())
以相同方式存储和检索的整个区块如下所示:

chunk1: iVBORw0KGgoAAAANSUhEUg==
chunk2: AAABAAAAAQAIBgAAAFxyqA==
iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqg=

我知道我对这个话题缺乏理解,我希望有人能指出解决我问题的正确方法。

你遇到的问题与填充物的处理有关

Base-64单元为6位,因此每3个字节创建4个b64字符。如果原始字节数不是3的倍数,则将0值字节添加到pad out中,使其为3的倍数。填充字节数由=个字符表示

在您的示例中,每一半都有一个额外的字节,需要填充2个字节,而整个字符串只需要1个字节

第二个问题是标签。如果你想使用base64,那么你不应该先解码它;把它放在64号基地就行了。问题是,您可以按照拆分字符串的方式连接字符串


解决方案是确保第一个块都是由3个字节的倍数构成的。这样,就不会对这些字符串进行填充,您可以将b64字符串正确地连接在一起。只有最后一个区块会有填充,字符将与您同时对整个区块进行编码时的字符相同。

当我从mongodb检索数据时,有没有办法修复填充?如上例所示:是否有方法将iVBORw0KGgoAAAANSUhEUg==和AAABAAAAAQAIBgAAAFxyqA==转换为IVBORW0KGGOAAAANSUHEUGAAAQAAEACAYAAABCCQG=?@jump3r是的,在Python中,您可以解码字符串,将它们连接在一起,然后对生成的字符串进行编码。