2013-04-29 65 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() 

...但这取决于你想要达到的目标。

相关问题