簡體   English   中英

使用python2.7將圖片手動存儲到mongo db

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM