我需要使用多个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=
我知道我对这个主题缺乏理解,我希望有人可以指出正确的方法解决我的问题。
答案 0 :(得分:0)
您遇到的问题与填充处理有关。
Base-64单位是6位,因此每3个字节创建4个b64字符。如果原始字节数不是3的倍数,则将0值字节添加到填充为3的倍数。填充字节数由=
个字符表示。
在你的例子中,每一半都有一个额外的字节(需要2个字节的填充),而整个字符串只需要1个。
第二个问题是<img>
标记。如果你想使用base64
,那么你不应该先解码它;保留基础64.问题是你可以按照分割它们的方式连接字符串。
解决方案是确保第一个块都是由3个字节的倍数组成的。这样,那些就没有填充,你可以正确地将b64字符串连接在一起。只有最后一个块会有填充,并且字符将与您一次编码整个事物的字符相同。