2013-04-29 128 views
4

這是我的第一個問題。將存儲在數據庫中的BLOB轉換爲HTML網站上的圖像

我讓用戶上傳他們自己的圖像到數據庫。 該圖像存儲爲BLOB。

我能夠成功地做到這一點。 我正在使用MySQL作爲數據庫。

我遇到麻煩的部分是將BLOB顯示爲網站上的圖像,當它被調用時。

現在只有二進制數據,很多奇怪的符號正在顯示。我認爲它與HTTP標題有關。現在它在:

print "Content-Type: text/html" 

我已經試過:

print "Content-Type: image/jpeg" 

我使用Python來連接數據庫,並編寫HTML。

編輯:代碼:

def showFile(): 

    # do SQL to retrieve blob where filename 
    conn, cursor = getConnectionAndCursor() 
    sql = """ 
    select data 
    from upload 
    where id=1 
    """ 
    cursor.execute(sql) 
    data = cursor.fetchone() 
    blob = data[0] 

    print "<hr>" 
    print "This is what I'm trying" 
    print """<img src="data:image/jpeg;base64,%s/>""" % data 

###################################################################### 
if __name__ == "__main__": 

    form = cgi.FieldStorage() 

    if "show_file" in form: 
     print "Content-Type: text/html" 
     print 
     printHeaders("Image upload example") 
     showFile() 
     printFooter() 
+0

爲什麼不能將文件路徑存儲到數據庫中的圖像的任何原因? http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay?rq=1 – Jacob 2013-04-29 13:31:12

+0

您需要包含更多來自您正在使用的腳本的代碼。 – Aya 2013-04-29 14:10:50

回答

3

圖像存儲在數據庫中的二進制格式,因此一旦使用解碼功能拿回來圖像

image.decode('base64') 

這將轉換您的BLOB談到服務器以圖像

+0

我給了這個嘗試和解碼沒有工作,但是當我從數據庫中檢索BLOB編碼到基礎64,並使用Reptilcus建議工作的HTML。 謝謝 – user2332223 2013-05-01 16:45:30

4

根據編碼方式的不同,您也可以使用圖像的數據URI。像這樣的東西可能會工作,如果他們編碼爲base64 PNGs。

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." /> 

由於@Alok說,你可能需要首先從二進制轉換BLOB爲Base64,然後使用數據URI。

+0

我嘗試了Alok的建議,但是當我從數據庫中檢索BLOB並將其編碼爲64位並使用HTML建議工作時。 謝謝你 – user2332223 2013-05-01 16:46:30

+0

很酷,如果它工作的話,請將upvote這個答案,以便其他人可以使用它,如果他們有同樣的問題。 – reptilicus 2013-05-01 17:00:52

0

好了,你可以直接返回一個HTML的響應,並使用現有的答案的組合,也可以直接返回image/jpeg響應,並轉儲BLOB到stdout,像這樣的東西......

def showFile(): 

    # do SQL to retrieve blob where filename 
    conn, cursor = getConnectionAndCursor() 
    sql = """ 
    select data 
    from upload 
    where id=1 
    """ 
    cursor.execute(sql) 
    data = cursor.fetchone() 
    blob = data[0] 

    print blob 

if __name__ == "__main__": 

    form = cgi.FieldStorage() 

    if "show_file" in form: 
     print "Content-Type: image/jpeg" 
     print 
     showFile() 

...但這取決於你想要達到的目標。

相關問題