[英]Manually storing picture to mongo db using python2.7
我需要使用多個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值字節相加以填充3的倍數。填充字節的數目由=
字符指示。
在您的示例中,每半部分都有一個額外的字節(需要填充2個字節),而整個字符串只需要1。
第二個問題是<img>
標簽。 如果要使用base64
,則不應該首先對其進行解碼; 只需將其保留為基數64。問題是您可以按照拆分字符串的方式串聯它們。
解決方案是確保第一個塊都由3個字節的倍數組成。 這樣,就不會有這些填充,您只需將b64字符串正確連接在一起即可。 只有最后一塊具有填充,並且字符將與您一次編碼整個字符相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.